]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Context.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[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
289b714b 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
967eacca
JY
6\r
7**/\r
8\r
9#include <IndustryStandard/UefiTcgPlatform.h>\r
10#include <Library/Tpm2CommandLib.h>\r
11#include <Library/Tpm2DeviceLib.h>\r
12#include <Library/BaseMemoryLib.h>\r
13#include <Library/BaseLib.h>\r
14#include <Library/DebugLib.h>\r
15\r
16#pragma pack(1)\r
17\r
18typedef struct {\r
c411b485
MK
19 TPM2_COMMAND_HEADER Header;\r
20 TPMI_DH_CONTEXT FlushHandle;\r
967eacca
JY
21} TPM2_FLUSH_CONTEXT_COMMAND;\r
22\r
23typedef struct {\r
c411b485 24 TPM2_RESPONSE_HEADER Header;\r
967eacca
JY
25} TPM2_FLUSH_CONTEXT_RESPONSE;\r
26\r
27#pragma pack()\r
28\r
29/**\r
30 This command causes all context associated with a loaded object or session to be removed from TPM memory.\r
31\r
32 @param[in] FlushHandle The handle of the item to flush.\r
b3548d32 33\r
967eacca
JY
34 @retval EFI_SUCCESS Operation completed successfully.\r
35 @retval EFI_DEVICE_ERROR The command was unsuccessful.\r
36**/\r
37EFI_STATUS\r
38EFIAPI\r
39Tpm2FlushContext (\r
c411b485 40 IN TPMI_DH_CONTEXT FlushHandle\r
967eacca
JY
41 )\r
42{\r
c411b485
MK
43 EFI_STATUS Status;\r
44 TPM2_FLUSH_CONTEXT_COMMAND SendBuffer;\r
45 TPM2_FLUSH_CONTEXT_RESPONSE RecvBuffer;\r
46 UINT32 SendBufferSize;\r
47 UINT32 RecvBufferSize;\r
967eacca
JY
48\r
49 //\r
50 // Construct command\r
51 //\r
c411b485
MK
52 SendBuffer.Header.tag = SwapBytes16 (TPM_ST_NO_SESSIONS);\r
53 SendBuffer.Header.commandCode = SwapBytes32 (TPM_CC_FlushContext);\r
967eacca
JY
54\r
55 SendBuffer.FlushHandle = SwapBytes32 (FlushHandle);\r
b3548d32 56\r
c411b485 57 SendBufferSize = (UINT32)sizeof (SendBuffer);\r
967eacca
JY
58 SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize);\r
59\r
60 //\r
61 // send Tpm command\r
62 //\r
63 RecvBufferSize = sizeof (RecvBuffer);\r
c411b485 64 Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
967eacca
JY
65 if (EFI_ERROR (Status)) {\r
66 return Status;\r
67 }\r
68\r
69 if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
e905fbb0 70 DEBUG ((DEBUG_ERROR, "Tpm2FlushContext - RecvBufferSize Error - %x\n", RecvBufferSize));\r
967eacca
JY
71 return EFI_DEVICE_ERROR;\r
72 }\r
c411b485
MK
73\r
74 if (SwapBytes32 (RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
75 DEBUG ((DEBUG_ERROR, "Tpm2FlushContext - responseCode - %x\n", SwapBytes32 (RecvBuffer.Header.responseCode)));\r
967eacca
JY
76 return EFI_DEVICE_ERROR;\r
77 }\r
78\r
79 return EFI_SUCCESS;\r
80}\r