]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Context.c
ArmPlatformPkg/NorFlashPlatformLib: remove unused Guid member from struct
[mirror_edk2.git] / SecurityPkg / Library / Tpm2CommandLib / Tpm2Context.c
CommitLineData
967eacca
JY
1/** @file\r
2 Implement TPM2 Context related command.\r
3\r
b3548d32 4Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved. <BR>\r
967eacca
JY
5This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include <IndustryStandard/UefiTcgPlatform.h>\r
16#include <Library/Tpm2CommandLib.h>\r
17#include <Library/Tpm2DeviceLib.h>\r
18#include <Library/BaseMemoryLib.h>\r
19#include <Library/BaseLib.h>\r
20#include <Library/DebugLib.h>\r
21\r
22#pragma pack(1)\r
23\r
24typedef struct {\r
25 TPM2_COMMAND_HEADER Header;\r
26 TPMI_DH_CONTEXT FlushHandle;\r
27} TPM2_FLUSH_CONTEXT_COMMAND;\r
28\r
29typedef struct {\r
30 TPM2_RESPONSE_HEADER Header;\r
31} TPM2_FLUSH_CONTEXT_RESPONSE;\r
32\r
33#pragma pack()\r
34\r
35/**\r
36 This command causes all context associated with a loaded object or session to be removed from TPM memory.\r
37\r
38 @param[in] FlushHandle The handle of the item to flush.\r
b3548d32 39\r
967eacca
JY
40 @retval EFI_SUCCESS Operation completed successfully.\r
41 @retval EFI_DEVICE_ERROR The command was unsuccessful.\r
42**/\r
43EFI_STATUS\r
44EFIAPI\r
45Tpm2FlushContext (\r
46 IN TPMI_DH_CONTEXT FlushHandle\r
47 )\r
48{\r
49 EFI_STATUS Status;\r
50 TPM2_FLUSH_CONTEXT_COMMAND SendBuffer;\r
51 TPM2_FLUSH_CONTEXT_RESPONSE RecvBuffer;\r
52 UINT32 SendBufferSize;\r
53 UINT32 RecvBufferSize;\r
54\r
55 //\r
56 // Construct command\r
57 //\r
58 SendBuffer.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
59 SendBuffer.Header.commandCode = SwapBytes32(TPM_CC_FlushContext);\r
60\r
61 SendBuffer.FlushHandle = SwapBytes32 (FlushHandle);\r
b3548d32 62\r
967eacca
JY
63 SendBufferSize = (UINT32) sizeof (SendBuffer);\r
64 SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize);\r
65\r
66 //\r
67 // send Tpm command\r
68 //\r
69 RecvBufferSize = sizeof (RecvBuffer);\r
70 Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
71 if (EFI_ERROR (Status)) {\r
72 return Status;\r
73 }\r
74\r
75 if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
76 DEBUG ((EFI_D_ERROR, "Tpm2FlushContext - RecvBufferSize Error - %x\n", RecvBufferSize));\r
77 return EFI_DEVICE_ERROR;\r
78 }\r
79 if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
80 DEBUG ((EFI_D_ERROR, "Tpm2FlushContext - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
81 return EFI_DEVICE_ERROR;\r
82 }\r
83\r
84 return EFI_SUCCESS;\r
85}\r
86\r