2 Implement TPM2 Miscellaneous related command.
4 Copyright (c) 2013 - 2016, 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_RH_HIERARCHY_AUTH AuthHandle
;
21 UINT32 AuthSessionSize
;
22 TPMS_AUTH_COMMAND AuthSession
;
24 } TPM2_SET_ALGORITHM_SET_COMMAND
;
27 TPM2_RESPONSE_HEADER Header
;
28 UINT32 AuthSessionSize
;
29 TPMS_AUTH_RESPONSE AuthSession
;
30 } TPM2_SET_ALGORITHM_SET_RESPONSE
;
35 This command allows the platform to change the set of algorithms that are used by the TPM.
36 The algorithmSet setting is a vendor-dependent value.
38 @param[in] AuthHandle TPM_RH_PLATFORM
39 @param[in] AuthSession Auth Session context
40 @param[in] AlgorithmSet A TPM vendor-dependent value indicating the
41 algorithm set selection
43 @retval EFI_SUCCESS Operation completed successfully.
44 @retval EFI_DEVICE_ERROR Unexpected device behavior.
49 IN TPMI_RH_PLATFORM AuthHandle
,
50 IN TPMS_AUTH_COMMAND
*AuthSession
,
51 IN UINT32 AlgorithmSet
55 TPM2_SET_ALGORITHM_SET_COMMAND SendBuffer
;
56 TPM2_SET_ALGORITHM_SET_RESPONSE RecvBuffer
;
57 UINT32 SendBufferSize
;
58 UINT32 RecvBufferSize
;
60 UINT32 SessionInfoSize
;
65 SendBuffer
.Header
.tag
= SwapBytes16 (TPM_ST_SESSIONS
);
66 SendBuffer
.Header
.commandCode
= SwapBytes32 (TPM_CC_SetAlgorithmSet
);
68 SendBuffer
.AuthHandle
= SwapBytes32 (AuthHandle
);
71 // Add in Auth session
73 Buffer
= (UINT8
*)&SendBuffer
.AuthSession
;
76 SessionInfoSize
= CopyAuthSessionCommand (AuthSession
, Buffer
);
77 Buffer
+= SessionInfoSize
;
78 SendBuffer
.AuthSessionSize
= SwapBytes32 (SessionInfoSize
);
83 WriteUnaligned32 ((UINT32
*)Buffer
, SwapBytes32 (AlgorithmSet
));
84 Buffer
+= sizeof (UINT32
);
86 SendBufferSize
= (UINT32
)((UINTN
)Buffer
- (UINTN
)&SendBuffer
);
87 SendBuffer
.Header
.paramSize
= SwapBytes32 (SendBufferSize
);
92 RecvBufferSize
= sizeof (RecvBuffer
);
93 Status
= Tpm2SubmitCommand (SendBufferSize
, (UINT8
*)&SendBuffer
, &RecvBufferSize
, (UINT8
*)&RecvBuffer
);
94 if (EFI_ERROR (Status
)) {
98 if (RecvBufferSize
< sizeof (TPM2_RESPONSE_HEADER
)) {
99 DEBUG ((DEBUG_ERROR
, "Tpm2SetAlgorithmSet - RecvBufferSize Error - %x\n", RecvBufferSize
));
100 Status
= EFI_DEVICE_ERROR
;
104 if (SwapBytes32 (RecvBuffer
.Header
.responseCode
) != TPM_RC_SUCCESS
) {
105 DEBUG ((DEBUG_ERROR
, "Tpm2SetAlgorithmSet - responseCode - %x\n", SwapBytes32 (RecvBuffer
.Header
.responseCode
)));
106 Status
= EFI_DEVICE_ERROR
;
112 // Clear AuthSession Content
114 ZeroMem (&SendBuffer
, sizeof (SendBuffer
));
115 ZeroMem (&RecvBuffer
, sizeof (RecvBuffer
));