• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   The header file of HII Config Access protocol implementation of TCG2
3   configuration module.
4 
5 Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution.  The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10 
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #ifndef __TCG2_CONFIG_IMPL_H__
17 #define __TCG2_CONFIG_IMPL_H__
18 
19 #include <Uefi.h>
20 
21 #include <Protocol/HiiConfigAccess.h>
22 #include <Protocol/HiiConfigRouting.h>
23 #include <Protocol/Tcg2Protocol.h>
24 #include <Protocol/VariableLock.h>
25 
26 #include <Library/BaseLib.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/DebugLib.h>
29 #include <Library/MemoryAllocationLib.h>
30 #include <Library/UefiBootServicesTableLib.h>
31 #include <Library/UefiRuntimeServicesTableLib.h>
32 #include <Library/UefiHiiServicesLib.h>
33 #include <Library/UefiLib.h>
34 #include <Library/HiiLib.h>
35 #include <Library/DevicePathLib.h>
36 #include <Library/PcdLib.h>
37 #include <Library/PrintLib.h>
38 #include <Library/Tcg2PhysicalPresenceLib.h>
39 
40 #include <Guid/MdeModuleHii.h>
41 
42 #include "Tcg2ConfigNvData.h"
43 
44 //
45 // Tool generated IFR binary data and String package data
46 //
47 extern UINT8                        Tcg2ConfigBin[];
48 extern UINT8                        Tcg2ConfigDxeStrings[];
49 
50 ///
51 /// HII specific Vendor Device Path definition.
52 ///
53 typedef struct {
54   VENDOR_DEVICE_PATH                VendorDevicePath;
55   EFI_DEVICE_PATH_PROTOCOL          End;
56 } HII_VENDOR_DEVICE_PATH;
57 
58 typedef struct {
59   UINTN                             Signature;
60 
61   EFI_HII_CONFIG_ACCESS_PROTOCOL    ConfigAccess;
62   EFI_HII_HANDLE                    HiiHandle;
63   EFI_HANDLE                        DriverHandle;
64 
65   UINT8                             TpmDeviceDetected;
66   EFI_TCG2_PROTOCOL                 *Tcg2Protocol;
67   EFI_TCG2_BOOT_SERVICE_CAPABILITY  ProtocolCapability;
68   UINT32                            PCRBanksDesired;
69 } TCG2_CONFIG_PRIVATE_DATA;
70 
71 extern TCG2_CONFIG_PRIVATE_DATA      mTcg2ConfigPrivateDateTemplate;
72 extern TCG2_CONFIG_PRIVATE_DATA      *mTcg2ConfigPrivateDate;
73 #define TCG2_CONFIG_PRIVATE_DATA_SIGNATURE     SIGNATURE_32 ('T', 'r', 'E', 'D')
74 #define TCG2_CONFIG_PRIVATE_DATA_FROM_THIS(a)  CR (a, TCG2_CONFIG_PRIVATE_DATA, ConfigAccess, TCG2_CONFIG_PRIVATE_DATA_SIGNATURE)
75 
76 #define TPM_HID_PNP_SIZE                                           8
77 #define TPM_HID_ACPI_SIZE                                          9
78 
79 /**
80   This function publish the TCG2 configuration Form for TPM device.
81 
82   @param[in, out]  PrivateData   Points to TCG2 configuration private data.
83 
84   @retval EFI_SUCCESS            HII Form is installed for this network device.
85   @retval EFI_OUT_OF_RESOURCES   Not enough resource for HII Form installation.
86   @retval Others                 Other errors as indicated.
87 
88 **/
89 EFI_STATUS
90 InstallTcg2ConfigForm (
91   IN OUT TCG2_CONFIG_PRIVATE_DATA  *PrivateData
92   );
93 
94 /**
95   This function removes TCG2 configuration Form.
96 
97   @param[in, out]  PrivateData   Points to TCG2 configuration private data.
98 
99 **/
100 VOID
101 UninstallTcg2ConfigForm (
102   IN OUT TCG2_CONFIG_PRIVATE_DATA    *PrivateData
103   );
104 
105 /**
106   This function allows a caller to extract the current configuration for one
107   or more named elements from the target driver.
108 
109   @param[in]   This              Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
110   @param[in]   Request           A null-terminated Unicode string in
111                                  <ConfigRequest> format.
112   @param[out]  Progress          On return, points to a character in the Request
113                                  string. Points to the string's null terminator if
114                                  request was successful. Points to the most recent
115                                  '&' before the first failing name/value pair (or
116                                  the beginning of the string if the failure is in
117                                  the first name/value pair) if the request was not
118                                  successful.
119   @param[out]  Results           A null-terminated Unicode string in
120                                  <ConfigAltResp> format which has all values filled
121                                  in for the names in the Request string. String to
122                                  be allocated by the called function.
123 
124   @retval EFI_SUCCESS            The Results is filled with the requested values.
125   @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the results.
126   @retval EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown name.
127   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
128                                  driver.
129 
130 **/
131 EFI_STATUS
132 EFIAPI
133 Tcg2ExtractConfig (
134   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL        *This,
135   IN CONST EFI_STRING                            Request,
136        OUT EFI_STRING                            *Progress,
137        OUT EFI_STRING                            *Results
138   );
139 
140 /**
141   This function processes the results of changes in configuration.
142 
143   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
144   @param[in]  Configuration      A null-terminated Unicode string in <ConfigResp>
145                                  format.
146   @param[out] Progress           A pointer to a string filled in with the offset of
147                                  the most recent '&' before the first failing
148                                  name/value pair (or the beginning of the string if
149                                  the failure is in the first name/value pair) or
150                                  the terminating NULL if all was successful.
151 
152   @retval EFI_SUCCESS            The Results is processed successfully.
153   @retval EFI_INVALID_PARAMETER  Configuration is NULL.
154   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
155                                  driver.
156 
157 **/
158 EFI_STATUS
159 EFIAPI
160 Tcg2RouteConfig (
161   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
162   IN CONST EFI_STRING                          Configuration,
163        OUT EFI_STRING                          *Progress
164   );
165 
166 /**
167   This function processes the results of changes in configuration.
168 
169   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
170   @param[in]  Action             Specifies the type of action taken by the browser.
171   @param[in]  QuestionId         A unique value which is sent to the original
172                                  exporting driver so that it can identify the type
173                                  of data to expect.
174   @param[in]  Type               The type of value for the question.
175   @param[in]  Value              A pointer to the data being sent to the original
176                                  exporting driver.
177   @param[out] ActionRequest      On return, points to the action requested by the
178                                  callback function.
179 
180   @retval EFI_SUCCESS            The callback successfully handled the action.
181   @retval EFI_OUT_OF_RESOURCES   Not enough storage is available to hold the
182                                  variable and its data.
183   @retval EFI_DEVICE_ERROR       The variable could not be saved.
184   @retval EFI_UNSUPPORTED        The specified Action is not supported by the
185                                  callback.
186 
187 **/
188 EFI_STATUS
189 EFIAPI
190 Tcg2Callback (
191   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
192   IN     EFI_BROWSER_ACTION                    Action,
193   IN     EFI_QUESTION_ID                       QuestionId,
194   IN     UINT8                                 Type,
195   IN     EFI_IFR_TYPE_VALUE                    *Value,
196      OUT EFI_BROWSER_ACTION_REQUEST            *ActionRequest
197   );
198 
199 #endif
200