]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Miscellaneous.c
SecurityPkg/Library/Tpm: Fix various typos
[mirror_edk2.git] / SecurityPkg / Library / Tpm2CommandLib / Tpm2Miscellaneous.c
CommitLineData
c1d93242 1/** @file\r
f9fd0c21 2 Implement TPM2 Miscellaneous related command.\r
c1d93242 3\r
7ae130da 4Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved. <BR>\r
289b714b 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
c1d93242
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
19 TPM2_COMMAND_HEADER Header;\r
20 TPMI_RH_HIERARCHY_AUTH AuthHandle;\r
21 UINT32 AuthSessionSize;\r
22 TPMS_AUTH_COMMAND AuthSession;\r
23 UINT32 AlgorithmSet;\r
24} TPM2_SET_ALGORITHM_SET_COMMAND;\r
25\r
26typedef struct {\r
27 TPM2_RESPONSE_HEADER Header;\r
28 UINT32 AuthSessionSize;\r
29 TPMS_AUTH_RESPONSE AuthSession;\r
30} TPM2_SET_ALGORITHM_SET_RESPONSE;\r
31\r
32#pragma pack()\r
33\r
34/**\r
35 This command allows the platform to change the set of algorithms that are used by the TPM.\r
36 The algorithmSet setting is a vendor-dependent value.\r
37\r
38 @param[in] AuthHandle TPM_RH_PLATFORM\r
39 @param[in] AuthSession Auth Session context\r
40 @param[in] AlgorithmSet A TPM vendor-dependent value indicating the\r
41 algorithm set selection\r
42\r
43 @retval EFI_SUCCESS Operation completed successfully.\r
44 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
45**/\r
46EFI_STATUS\r
47EFIAPI\r
48Tpm2SetAlgorithmSet (\r
49 IN TPMI_RH_PLATFORM AuthHandle,\r
50 IN TPMS_AUTH_COMMAND *AuthSession,\r
51 IN UINT32 AlgorithmSet\r
52 )\r
53{\r
54 EFI_STATUS Status;\r
55 TPM2_SET_ALGORITHM_SET_COMMAND SendBuffer;\r
56 TPM2_SET_ALGORITHM_SET_RESPONSE RecvBuffer;\r
57 UINT32 SendBufferSize;\r
58 UINT32 RecvBufferSize;\r
59 UINT8 *Buffer;\r
60 UINT32 SessionInfoSize;\r
61\r
62 //\r
63 // Construct command\r
64 //\r
65 SendBuffer.Header.tag = SwapBytes16(TPM_ST_SESSIONS);\r
66 SendBuffer.Header.commandCode = SwapBytes32(TPM_CC_SetAlgorithmSet);\r
67\r
68 SendBuffer.AuthHandle = SwapBytes32 (AuthHandle);\r
69\r
70 //\r
71 // Add in Auth session\r
72 //\r
73 Buffer = (UINT8 *)&SendBuffer.AuthSession;\r
74\r
75 // sessionInfoSize\r
76 SessionInfoSize = CopyAuthSessionCommand (AuthSession, Buffer);\r
77 Buffer += SessionInfoSize;\r
78 SendBuffer.AuthSessionSize = SwapBytes32(SessionInfoSize);\r
79\r
80 //\r
81 // Real data\r
82 //\r
83 WriteUnaligned32 ((UINT32 *)Buffer, SwapBytes32(AlgorithmSet));\r
84 Buffer += sizeof(UINT32);\r
85\r
86 SendBufferSize = (UINT32)((UINTN)Buffer - (UINTN)&SendBuffer);\r
87 SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize);\r
88\r
89 //\r
90 // send Tpm command\r
91 //\r
92 RecvBufferSize = sizeof (RecvBuffer);\r
93 Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
94 if (EFI_ERROR (Status)) {\r
7ae130da 95 goto Done;\r
c1d93242
JY
96 }\r
97\r
98 if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
99 DEBUG ((EFI_D_ERROR, "Tpm2SetAlgorithmSet - RecvBufferSize Error - %x\n", RecvBufferSize));\r
7ae130da
JY
100 Status = EFI_DEVICE_ERROR;\r
101 goto Done;\r
c1d93242
JY
102 }\r
103 if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
104 DEBUG ((EFI_D_ERROR, "Tpm2SetAlgorithmSet - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
7ae130da
JY
105 Status = EFI_DEVICE_ERROR;\r
106 goto Done;\r
c1d93242
JY
107 }\r
108\r
7ae130da
JY
109Done:\r
110 //\r
111 // Clear AuthSession Content\r
112 //\r
113 ZeroMem (&SendBuffer, sizeof(SendBuffer));\r
114 ZeroMem (&RecvBuffer, sizeof(RecvBuffer));\r
115 return Status;\r
c1d93242 116}\r