1 /** @file
2   This library is used by other modules to send TPM12 command.
3 
4 Copyright (c) 2013 - 2015, 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 _TPM12_COMMAND_LIB_H_
16 #define _TPM12_COMMAND_LIB_H_
17 
18 #include <IndustryStandard/Tpm12.h>
19 
20 /**
21   Send Startup command to TPM1.2.
22 
23   @param TpmSt           Startup Type.
24 
25   @retval EFI_SUCCESS      Operation completed successfully.
26   @retval EFI_DEVICE_ERROR Unexpected device behavior.
27 **/
28 EFI_STATUS
29 EFIAPI
30 Tpm12Startup (
31   IN TPM_STARTUP_TYPE          TpmSt
32   );
33 
34 /**
35   Send SaveState command to TPM1.2.
36 
37   @retval EFI_SUCCESS      Operation completed successfully.
38   @retval EFI_DEVICE_ERROR Unexpected device behavior.
39 **/
40 EFI_STATUS
41 EFIAPI
42 Tpm12SaveState (
43   VOID
44   );
45 
46 /**
47   Send ForceClear command to TPM1.2.
48 
49   @retval EFI_SUCCESS      Operation completed successfully.
50   @retval EFI_DEVICE_ERROR Unexpected device behavior.
51 **/
52 EFI_STATUS
53 EFIAPI
54 Tpm12ForceClear (
55   VOID
56   );
57 
58 #pragma pack(1)
59 
60 typedef struct {
61   UINT16                            sizeOfSelect;
62   UINT8                             pcrSelect[3];
63 } TPM12_PCR_SELECTION;
64 
65 typedef struct {
66   TPM12_PCR_SELECTION               pcrSelection;
67   TPM_LOCALITY_SELECTION            localityAtRelease;
68   TPM_COMPOSITE_HASH                digestAtRelease;
69 } TPM12_PCR_INFO_SHORT;
70 
71 typedef struct {
72   TPM_STRUCTURE_TAG               tag;
73   TPM_NV_INDEX                    nvIndex;
74   TPM12_PCR_INFO_SHORT            pcrInfoRead;
75   TPM12_PCR_INFO_SHORT            pcrInfoWrite;
76   TPM_NV_ATTRIBUTES               permission;
77   BOOLEAN                         bReadSTClear;
78   BOOLEAN                         bWriteSTClear;
79   BOOLEAN                         bWriteDefine;
80   UINT32                          dataSize;
81 } TPM12_NV_DATA_PUBLIC;
82 
83 #pragma pack()
84 
85 /**
86   Send NV DefineSpace command to TPM1.2.
87 
88   @param PubInfo           The public parameters of the NV area.
89   @param EncAuth           The encrypted AuthData, only valid if the attributes require subsequent authorization.
90 
91   @retval EFI_SUCCESS      Operation completed successfully.
92   @retval EFI_DEVICE_ERROR Unexpected device behavior.
93 **/
94 EFI_STATUS
95 EFIAPI
96 Tpm12NvDefineSpace (
97   IN TPM12_NV_DATA_PUBLIC  *PubInfo,
98   IN TPM_ENCAUTH           *EncAuth
99   );
100 
101 /**
102   Send NV ReadValue command to TPM1.2.
103 
104   @param NvIndex           The index of the area to set.
105   @param Offset            The offset into the area.
106   @param DataSize          The size of the data area.
107   @param Data              The data to set the area to.
108 
109   @retval EFI_SUCCESS      Operation completed successfully.
110   @retval EFI_DEVICE_ERROR Unexpected device behavior.
111 **/
112 EFI_STATUS
113 EFIAPI
114 Tpm12NvReadValue (
115   IN TPM_NV_INDEX   NvIndex,
116   IN UINT32         Offset,
117   IN OUT UINT32     *DataSize,
118   OUT UINT8         *Data
119   );
120 
121 /**
122   Send NV WriteValue command to TPM1.2.
123 
124   @param NvIndex           The index of the area to set.
125   @param Offset            The offset into the NV Area.
126   @param DataSize          The size of the data parameter.
127   @param Data              The data to set the area to.
128 
129   @retval EFI_SUCCESS      Operation completed successfully.
130   @retval EFI_DEVICE_ERROR Unexpected device behavior.
131 **/
132 EFI_STATUS
133 EFIAPI
134 Tpm12NvWriteValue (
135   IN TPM_NV_INDEX   NvIndex,
136   IN UINT32         Offset,
137   IN UINT32         DataSize,
138   IN UINT8          *Data
139   );
140 
141 #endif
142