1 /** @file
2   This library abstract how to access TPM2 hardware device.
3 
4 Copyright (c) 2013, Intel Corporation. All rights reserved. <BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef _TPM2_DEVICE_LIB_H_
16 #define _TPM2_DEVICE_LIB_H_
17 
18 #include <Uefi.h>
19 
20 /**
21   This service enables the sending of commands to the TPM2.
22 
23   @param[in]      InputParameterBlockSize  Size of the TPM2 input parameter block.
24   @param[in]      InputParameterBlock      Pointer to the TPM2 input parameter block.
25   @param[in,out]  OutputParameterBlockSize Size of the TPM2 output parameter block.
26   @param[in]      OutputParameterBlock     Pointer to the TPM2 output parameter block.
27 
28   @retval EFI_SUCCESS            The command byte stream was successfully sent to the device and a response was successfully received.
29   @retval EFI_DEVICE_ERROR       The command was not successfully sent to the device or a response was not successfully received from the device.
30   @retval EFI_BUFFER_TOO_SMALL   The output parameter block is too small.
31 **/
32 EFI_STATUS
33 EFIAPI
34 Tpm2SubmitCommand (
35   IN UINT32            InputParameterBlockSize,
36   IN UINT8             *InputParameterBlock,
37   IN OUT UINT32        *OutputParameterBlockSize,
38   IN UINT8             *OutputParameterBlock
39   );
40 
41 /**
42   This service requests use TPM2.
43 
44   @retval EFI_SUCCESS      Get the control of TPM2 chip.
45   @retval EFI_NOT_FOUND    TPM2 not found.
46   @retval EFI_DEVICE_ERROR Unexpected device behavior.
47 **/
48 EFI_STATUS
49 EFIAPI
50 Tpm2RequestUseTpm (
51   VOID
52   );
53 
54 /**
55   This service enables the sending of commands to the TPM2.
56 
57   @param[in]      InputParameterBlockSize  Size of the TPM2 input parameter block.
58   @param[in]      InputParameterBlock      Pointer to the TPM2 input parameter block.
59   @param[in,out]  OutputParameterBlockSize Size of the TPM2 output parameter block.
60   @param[in]      OutputParameterBlock     Pointer to the TPM2 output parameter block.
61 
62   @retval EFI_SUCCESS            The command byte stream was successfully sent to the device and a response was successfully received.
63   @retval EFI_DEVICE_ERROR       The command was not successfully sent to the device or a response was not successfully received from the device.
64   @retval EFI_BUFFER_TOO_SMALL   The output parameter block is too small.
65 **/
66 typedef
67 EFI_STATUS
68 (EFIAPI *TPM2_SUBMIT_COMMAND) (
69   IN UINT32            InputParameterBlockSize,
70   IN UINT8             *InputParameterBlock,
71   IN OUT UINT32        *OutputParameterBlockSize,
72   IN UINT8             *OutputParameterBlock
73   );
74 
75 /**
76   This service requests use TPM2.
77 
78   @retval EFI_SUCCESS      Get the control of TPM2 chip.
79   @retval EFI_NOT_FOUND    TPM2 not found.
80   @retval EFI_DEVICE_ERROR Unexpected device behavior.
81 **/
82 typedef
83 EFI_STATUS
84 (EFIAPI *TPM2_REQUEST_USE_TPM) (
85   VOID
86   );
87 
88 typedef struct {
89   EFI_GUID                           ProviderGuid;
90   TPM2_SUBMIT_COMMAND                Tpm2SubmitCommand;
91   TPM2_REQUEST_USE_TPM               Tpm2RequestUseTpm;
92 } TPM2_DEVICE_INTERFACE;
93 
94 /**
95   This service register TPM2 device.
96 
97   @param Tpm2Device  TPM2 device
98 
99   @retval EFI_SUCCESS          This TPM2 device is registered successfully.
100   @retval EFI_UNSUPPORTED      System does not support register this TPM2 device.
101   @retval EFI_ALREADY_STARTED  System already register this TPM2 device.
102 **/
103 EFI_STATUS
104 EFIAPI
105 Tpm2RegisterTpm2DeviceLib (
106   IN TPM2_DEVICE_INTERFACE   *Tpm2Device
107   );
108 
109 #endif
110