• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   The header file of HII Config Access protocol implementation of TCG
3   configuration module.
4 
5 Copyright (c) 2011 - 2016, 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 __TCG_CONFIG_IMPL_H__
17 #define __TCG_CONFIG_IMPL_H__
18 
19 #include <Uefi.h>
20 
21 #include <Protocol/HiiConfigAccess.h>
22 #include <Protocol/HiiConfigRouting.h>
23 #include <Protocol/TcgService.h>
24 
25 #include <Library/BaseLib.h>
26 #include <Library/BaseMemoryLib.h>
27 #include <Library/DebugLib.h>
28 #include <Library/MemoryAllocationLib.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/UefiRuntimeServicesTableLib.h>
31 #include <Library/UefiHiiServicesLib.h>
32 #include <Library/UefiLib.h>
33 #include <Library/HiiLib.h>
34 #include <Library/DevicePathLib.h>
35 #include <Library/PcdLib.h>
36 #include <Library/PrintLib.h>
37 #include <Library/Tpm12DeviceLib.h>
38 
39 #include <Guid/MdeModuleHii.h>
40 
41 #include "TcgConfigNvData.h"
42 
43 //
44 // Tool generated IFR binary data and String package data
45 //
46 extern UINT8                        TcgConfigBin[];
47 extern UINT8                        TcgConfigDxeStrings[];
48 
49 ///
50 /// HII specific Vendor Device Path definition.
51 ///
52 typedef struct {
53   VENDOR_DEVICE_PATH                VendorDevicePath;
54   EFI_DEVICE_PATH_PROTOCOL          End;
55 } HII_VENDOR_DEVICE_PATH;
56 
57 typedef struct {
58   UINTN                             Signature;
59 
60   EFI_HII_CONFIG_ACCESS_PROTOCOL    ConfigAccess;
61   EFI_HII_HANDLE                    HiiHandle;
62   EFI_HANDLE                        DriverHandle;
63 
64   TCG_CONFIGURATION                 *Configuration;
65   EFI_TCG_PROTOCOL                  *TcgProtocol;
66 } TCG_CONFIG_PRIVATE_DATA;
67 
68 extern TCG_CONFIG_PRIVATE_DATA      mTcgConfigPrivateDateTemplate;
69 
70 #define TCG_CONFIG_PRIVATE_DATA_SIGNATURE     SIGNATURE_32 ('T', 'C', 'G', 'D')
71 #define TCG_CONFIG_PRIVATE_DATA_FROM_THIS(a)  CR (a, TCG_CONFIG_PRIVATE_DATA, ConfigAccess, TCG_CONFIG_PRIVATE_DATA_SIGNATURE)
72 
73 
74 /**
75   This function publish the TCG configuration Form for TPM device.
76 
77   @param[in, out]  PrivateData   Points to TCG configuration private data.
78 
79   @retval EFI_SUCCESS            HII Form is installed for this network device.
80   @retval EFI_OUT_OF_RESOURCES   Not enough resource for HII Form installation.
81   @retval Others                 Other errors as indicated.
82 
83 **/
84 EFI_STATUS
85 InstallTcgConfigForm (
86   IN OUT TCG_CONFIG_PRIVATE_DATA  *PrivateData
87   );
88 
89 /**
90   This function removes TCG configuration Form.
91 
92   @param[in, out]  PrivateData   Points to TCG configuration private data.
93 
94 **/
95 VOID
96 UninstallTcgConfigForm (
97   IN OUT TCG_CONFIG_PRIVATE_DATA    *PrivateData
98   );
99 
100 /**
101   This function allows a caller to extract the current configuration for one
102   or more named elements from the target driver.
103 
104   @param[in]   This              Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
105   @param[in]   Request           A null-terminated Unicode string in
106                                  <ConfigRequest> format.
107   @param[out]  Progress          On return, points to a character in the Request
108                                  string. Points to the string's null terminator if
109                                  request was successful. Points to the most recent
110                                  '&' before the first failing name/value pair (or
111                                  the beginning of the string if the failure is in
112                                  the first name/value pair) if the request was not
113                                  successful.
114   @param[out]  Results           A null-terminated Unicode string in
115                                  <ConfigAltResp> format which has all values filled
116                                  in for the names in the Request string. String to
117                                  be allocated by the called function.
118 
119   @retval EFI_SUCCESS            The Results is filled with the requested values.
120   @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the results.
121   @retval EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown name.
122   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
123                                  driver.
124 
125 **/
126 EFI_STATUS
127 EFIAPI
128 TcgExtractConfig (
129   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL        *This,
130   IN CONST EFI_STRING                            Request,
131        OUT EFI_STRING                            *Progress,
132        OUT EFI_STRING                            *Results
133   );
134 
135 /**
136   This function processes the results of changes in configuration.
137 
138   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
139   @param[in]  Configuration      A null-terminated Unicode string in <ConfigResp>
140                                  format.
141   @param[out] Progress           A pointer to a string filled in with the offset of
142                                  the most recent '&' before the first failing
143                                  name/value pair (or the beginning of the string if
144                                  the failure is in the first name/value pair) or
145                                  the terminating NULL if all was successful.
146 
147   @retval EFI_SUCCESS            The Results is processed successfully.
148   @retval EFI_INVALID_PARAMETER  Configuration is NULL.
149   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
150                                  driver.
151 
152 **/
153 EFI_STATUS
154 EFIAPI
155 TcgRouteConfig (
156   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
157   IN CONST EFI_STRING                          Configuration,
158        OUT EFI_STRING                          *Progress
159   );
160 
161 /**
162   This function processes the results of changes in configuration.
163 
164   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
165   @param[in]  Action             Specifies the type of action taken by the browser.
166   @param[in]  QuestionId         A unique value which is sent to the original
167                                  exporting driver so that it can identify the type
168                                  of data to expect.
169   @param[in]  Type               The type of value for the question.
170   @param[in]  Value              A pointer to the data being sent to the original
171                                  exporting driver.
172   @param[out] ActionRequest      On return, points to the action requested by the
173                                  callback function.
174 
175   @retval EFI_SUCCESS            The callback successfully handled the action.
176   @retval EFI_OUT_OF_RESOURCES   Not enough storage is available to hold the
177                                  variable and its data.
178   @retval EFI_DEVICE_ERROR       The variable could not be saved.
179   @retval EFI_UNSUPPORTED        The specified Action is not supported by the
180                                  callback.
181 
182 **/
183 EFI_STATUS
184 EFIAPI
185 TcgCallback (
186   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
187   IN     EFI_BROWSER_ACTION                    Action,
188   IN     EFI_QUESTION_ID                       QuestionId,
189   IN     UINT8                                 Type,
190   IN     EFI_IFR_TYPE_VALUE                    *Value,
191      OUT EFI_BROWSER_ACTION_REQUEST            *ActionRequest
192   );
193 
194 #endif
195