2 Implement TPM2 Context related command.
4 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved. <BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
9 #include <IndustryStandard/UefiTcgPlatform.h>
10 #include <Library/Tpm2CommandLib.h>
11 #include <Library/Tpm2DeviceLib.h>
12 #include <Library/BaseMemoryLib.h>
13 #include <Library/BaseLib.h>
14 #include <Library/DebugLib.h>
19 TPM2_COMMAND_HEADER Header
;
20 TPMI_DH_CONTEXT FlushHandle
;
21 } TPM2_FLUSH_CONTEXT_COMMAND
;
24 TPM2_RESPONSE_HEADER Header
;
25 } TPM2_FLUSH_CONTEXT_RESPONSE
;
30 This command causes all context associated with a loaded object or session to be removed from TPM memory.
32 @param[in] FlushHandle The handle of the item to flush.
34 @retval EFI_SUCCESS Operation completed successfully.
35 @retval EFI_DEVICE_ERROR The command was unsuccessful.
40 IN TPMI_DH_CONTEXT FlushHandle
44 TPM2_FLUSH_CONTEXT_COMMAND SendBuffer
;
45 TPM2_FLUSH_CONTEXT_RESPONSE RecvBuffer
;
46 UINT32 SendBufferSize
;
47 UINT32 RecvBufferSize
;
52 SendBuffer
.Header
.tag
= SwapBytes16(TPM_ST_NO_SESSIONS
);
53 SendBuffer
.Header
.commandCode
= SwapBytes32(TPM_CC_FlushContext
);
55 SendBuffer
.FlushHandle
= SwapBytes32 (FlushHandle
);
57 SendBufferSize
= (UINT32
) sizeof (SendBuffer
);
58 SendBuffer
.Header
.paramSize
= SwapBytes32 (SendBufferSize
);
63 RecvBufferSize
= sizeof (RecvBuffer
);
64 Status
= Tpm2SubmitCommand (SendBufferSize
, (UINT8
*)&SendBuffer
, &RecvBufferSize
, (UINT8
*)&RecvBuffer
);
65 if (EFI_ERROR (Status
)) {
69 if (RecvBufferSize
< sizeof (TPM2_RESPONSE_HEADER
)) {
70 DEBUG ((EFI_D_ERROR
, "Tpm2FlushContext - RecvBufferSize Error - %x\n", RecvBufferSize
));
71 return EFI_DEVICE_ERROR
;
73 if (SwapBytes32(RecvBuffer
.Header
.responseCode
) != TPM_RC_SUCCESS
) {
74 DEBUG ((EFI_D_ERROR
, "Tpm2FlushContext - responseCode - %x\n", SwapBytes32(RecvBuffer
.Header
.responseCode
)));
75 return EFI_DEVICE_ERROR
;