1 /** @file
2   Implement TPM1.2 NV Self Test related commands.
3 
4 Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved. <BR>
5 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7 
8 **/
9 
10 #include <PiPei.h>
11 #include <Library/Tpm12CommandLib.h>
12 #include <Library/BaseLib.h>
13 #include <Library/DebugLib.h>
14 #include <Library/Tpm12DeviceLib.h>
15 
16 /**
17 Send TPM_ContinueSelfTest command to TPM.
18 
19 @retval EFI_SUCCESS           Operation completed successfully.
20 @retval EFI_TIMEOUT           The register can't run into the expected status in time.
21 @retval EFI_BUFFER_TOO_SMALL  Response data buffer is too small.
22 @retval EFI_DEVICE_ERROR      Unexpected device behavior.
23 
24 **/
25 EFI_STATUS
26 EFIAPI
Tpm12ContinueSelfTest(VOID)27 Tpm12ContinueSelfTest (
28   VOID
29   )
30 {
31   EFI_STATUS           Status;
32   TPM_RQU_COMMAND_HDR  Command;
33   TPM_RSP_COMMAND_HDR  Response;
34   UINT32               Length;
35 
36   //
37   // send Tpm command TPM_ORD_ContinueSelfTest
38   //
39   Command.tag       = SwapBytes16 (TPM_TAG_RQU_COMMAND);
40   Command.paramSize = SwapBytes32 (sizeof (Command));
41   Command.ordinal   = SwapBytes32 (TPM_ORD_ContinueSelfTest);
42   Length = sizeof (Response);
43   Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, (UINT8 *)&Response);
44   if (EFI_ERROR (Status)) {
45     return Status;
46   }
47 
48   if (SwapBytes32 (Response.returnCode) != TPM_SUCCESS) {
49     DEBUG ((DEBUG_ERROR, "Tpm12ContinueSelfTest: Response Code error! 0x%08x\r\n", SwapBytes32 (Response.returnCode)));
50     return EFI_DEVICE_ERROR;
51   }
52 
53   return Status;
54 }
55