Commit | Line | Data |
---|---|---|
967eacca JY |
1 | /** @file\r |
2 | Implement TPM2 Context related command.\r | |
3 | \r | |
b3548d32 | 4 | Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved. <BR>\r |
289b714b | 5 | SPDX-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 | |
18 | typedef 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 | |
23 | typedef 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 | |
37 | EFI_STATUS\r | |
38 | EFIAPI\r | |
39 | Tpm2FlushContext (\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 |