2 Implement TPM1.2 Startup related command.
4 Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>
5 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
11 #include <Library/BaseMemoryLib.h>
12 #include <Library/BaseLib.h>
13 #include <Library/Tpm12DeviceLib.h>
14 #include <Library/DebugLib.h>
19 TPM_RQU_COMMAND_HDR Hdr
;
20 TPM_STARTUP_TYPE TpmSt
;
26 Send Startup command to TPM1.2.
28 @param TpmSt Startup Type.
30 @retval EFI_SUCCESS Operation completed successfully.
31 @retval EFI_DEVICE_ERROR Unexpected device behavior.
36 IN TPM_STARTUP_TYPE TpmSt
40 TPM_CMD_START_UP Command
;
41 TPM_RSP_COMMAND_HDR Response
;
45 // send Tpm command TPM_ORD_Startup
47 Command
.Hdr
.tag
= SwapBytes16 (TPM_TAG_RQU_COMMAND
);
48 Command
.Hdr
.paramSize
= SwapBytes32 (sizeof (Command
));
49 Command
.Hdr
.ordinal
= SwapBytes32 (TPM_ORD_Startup
);
50 Command
.TpmSt
= SwapBytes16 (TpmSt
);
51 Length
= sizeof (Response
);
52 Status
= Tpm12SubmitCommand (sizeof (Command
), (UINT8
*)&Command
, &Length
, (UINT8
*)&Response
);
53 if (EFI_ERROR (Status
)) {
57 switch (SwapBytes32 (Response
.returnCode
)) {
59 DEBUG ((DEBUG_INFO
, "TPM12Startup: TPM_SUCCESS\n"));
61 case TPM_INVALID_POSTINIT
:
62 // In warm reset, TPM may response TPM_INVALID_POSTINIT
63 DEBUG ((DEBUG_INFO
, "TPM12Startup: TPM_INVALID_POSTINIT\n"));
66 return EFI_DEVICE_ERROR
;
71 Send SaveState command to TPM1.2.
73 @retval EFI_SUCCESS Operation completed successfully.
74 @retval EFI_DEVICE_ERROR Unexpected device behavior.
83 TPM_RQU_COMMAND_HDR Command
;
84 TPM_RSP_COMMAND_HDR Response
;
88 // send Tpm command TPM_ORD_SaveState
90 Command
.tag
= SwapBytes16 (TPM_TAG_RQU_COMMAND
);
91 Command
.paramSize
= SwapBytes32 (sizeof (Command
));
92 Command
.ordinal
= SwapBytes32 (TPM_ORD_SaveState
);
93 Length
= sizeof (Response
);
94 Status
= Tpm12SubmitCommand (sizeof (Command
), (UINT8
*)&Command
, &Length
, (UINT8
*)&Response
);
95 if (EFI_ERROR (Status
)) {
99 switch (SwapBytes32 (Response
.returnCode
)) {
103 return EFI_DEVICE_ERROR
;