]>
Commit | Line | Data |
---|---|---|
7c6c064c ED |
1 | /** @file\r |
2 | FormDiplay protocol to show Form\r | |
3 | \r | |
d1102dba LG |
4 | Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r |
5 | This program and the accompanying materials are licensed and made available under\r | |
6 | the terms and conditions of the BSD License that accompanies this distribution.\r | |
7c6c064c | 7 | The full text of the license may be found at\r |
d1102dba | 8 | http://opensource.org/licenses/bsd-license.php.\r |
7c6c064c | 9 | \r |
d1102dba | 10 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r |
7c6c064c ED |
11 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r |
12 | \r | |
13 | **/\r | |
14 | \r | |
15 | #ifndef __DISPLAY_PROTOCOL_H__\r | |
16 | #define __DISPLAY_PROTOCOL_H__\r | |
17 | \r | |
18 | #include <Protocol/FormBrowser2.h>\r | |
19 | \r | |
20 | #define EDKII_FORM_DISPLAY_ENGINE_PROTOCOL_GUID \\r | |
21 | { 0x9bbe29e9, 0xfda1, 0x41ec, { 0xad, 0x52, 0x45, 0x22, 0x13, 0x74, 0x2d, 0x2e } }\r | |
22 | \r | |
d1102dba | 23 | //\r |
7c6c064c ED |
24 | // Do nothing.\r |
25 | //\r | |
26 | #define BROWSER_ACTION_NONE BIT16\r | |
27 | //\r | |
28 | // ESC Exit\r | |
29 | //\r | |
30 | #define BROWSER_ACTION_FORM_EXIT BIT17\r | |
31 | \r | |
4d4deaac ED |
32 | #define BROWSER_SUCCESS 0x0\r |
33 | #define BROWSER_ERROR BIT31\r | |
34 | #define BROWSER_SUBMIT_FAIL BROWSER_ERROR | 0x01\r | |
35 | #define BROWSER_NO_SUBMIT_IF BROWSER_ERROR | 0x02\r | |
36 | #define BROWSER_FORM_NOT_FOUND BROWSER_ERROR | 0x03\r | |
37 | #define BROWSER_FORM_SUPPRESS BROWSER_ERROR | 0x04\r | |
38 | #define BROWSER_PROTOCOL_NOT_FOUND BROWSER_ERROR | 0x05\r | |
39 | #define BROWSER_INCONSISTENT_IF BROWSER_ERROR | 0x06\r | |
40 | #define BROWSER_WARNING_IF BROWSER_ERROR | 0x07\r | |
41 | #define BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF BROWSER_ERROR | 0x08\r | |
f2e7732e ED |
42 | #define BROWSER_RECONNECT_REQUIRED BROWSER_ERROR | 0x09\r |
43 | #define BROWSER_RECONNECT_FAIL BROWSER_ERROR | 0x0A\r | |
44 | #define BROWSER_RECONNECT_SAVE_CHANGES BROWSER_ERROR | 0x0B\r | |
7c6c064c ED |
45 | \r |
46 | #define FORM_DISPLAY_ENGINE_STATEMENT_VERSION_1 0x10000\r | |
47 | #define FORM_DISPLAY_ENGINE_VERSION_1 0x10000\r | |
48 | \r | |
49 | typedef struct {\r | |
50 | //\r | |
51 | // HII Data Type\r | |
52 | //\r | |
53 | UINT8 Type;\r | |
54 | //\r | |
55 | // Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING\r | |
56 | //\r | |
57 | UINT8 *Buffer;\r | |
58 | UINT16 BufferLen;\r | |
59 | EFI_IFR_TYPE_VALUE Value;\r | |
60 | } EFI_HII_VALUE;\r | |
61 | \r | |
62 | #define DISPLAY_QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')\r | |
63 | \r | |
64 | typedef struct {\r | |
65 | UINTN Signature;\r | |
66 | LIST_ENTRY Link;\r | |
67 | //\r | |
68 | // OneOfOption Data\r | |
69 | //\r | |
70 | EFI_IFR_ONE_OF_OPTION *OptionOpCode;\r | |
71 | //\r | |
72 | // Option ImageId and AnimationId\r | |
73 | //\r | |
74 | EFI_IMAGE_ID ImageId;\r | |
75 | EFI_ANIMATION_ID AnimationId;\r | |
76 | } DISPLAY_QUESTION_OPTION;\r | |
77 | \r | |
78 | #define DISPLAY_QUESTION_OPTION_FROM_LINK(a) CR (a, DISPLAY_QUESTION_OPTION, Link, DISPLAY_QUESTION_OPTION_SIGNATURE)\r | |
79 | \r | |
80 | typedef struct _FORM_DISPLAY_ENGINE_STATEMENT FORM_DISPLAY_ENGINE_STATEMENT;\r | |
81 | typedef struct _FORM_DISPLAY_ENGINE_FORM FORM_DISPLAY_ENGINE_FORM;\r | |
82 | \r | |
83 | #define STATEMENT_VALID 0x0\r | |
84 | #define STATEMENT_INVALID BIT31\r | |
85 | \r | |
86 | #define INCOSISTENT_IF_TRUE STATEMENT_INVALID | 0x01\r | |
87 | #define WARNING_IF_TRUE STATEMENT_INVALID | 0x02\r | |
88 | #define STRING_TOO_LONG STATEMENT_INVALID | 0x03\r | |
89 | // ... to be extended.\r | |
90 | \r | |
91 | typedef struct {\r | |
92 | //\r | |
93 | // StringId for INCONSITENT_IF or WARNING_IF\r | |
94 | //\r | |
95 | EFI_STRING_ID StringId;\r | |
96 | //\r | |
97 | // TimeOut for WARNING_IF\r | |
98 | //\r | |
99 | UINT8 TimeOut;\r | |
100 | } STATEMENT_ERROR_INFO;\r | |
101 | \r | |
102 | /**\r | |
103 | Perform value check for a question.\r | |
d1102dba | 104 | \r |
7c6c064c ED |
105 | @param Form Form where Statement is in.\r |
106 | @param Statement Value will check for it.\r | |
107 | @param Value New value will be checked.\r | |
d1102dba | 108 | \r |
7c6c064c ED |
109 | @retval Status Value Status\r |
110 | \r | |
111 | **/\r | |
112 | typedef\r | |
113 | UINT32\r | |
114 | (EFIAPI *VALIDATE_QUESTION) (\r | |
115 | IN FORM_DISPLAY_ENGINE_FORM *Form,\r | |
116 | IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r | |
d1102dba | 117 | IN EFI_HII_VALUE *Value,\r |
7c6c064c ED |
118 | OUT STATEMENT_ERROR_INFO *ErrorInfo\r |
119 | );\r | |
120 | \r | |
121 | /**\r | |
d1102dba | 122 | Perform Password check.\r |
7c6c064c | 123 | Passwork may be encrypted by driver that requires the specific check.\r |
d1102dba | 124 | \r |
7c6c064c ED |
125 | @param Form Form where Password Statement is in.\r |
126 | @param Statement Password statement\r | |
127 | @param PasswordString Password string to be checked. It may be NULL.\r | |
128 | NULL means to restore password.\r | |
129 | "" string can be used to checked whether old password does exist.\r | |
d1102dba | 130 | \r |
7c6c064c ED |
131 | @return Status Status of Password check.\r |
132 | **/\r | |
133 | typedef\r | |
134 | EFI_STATUS\r | |
135 | (EFIAPI *PASSWORD_CHECK) (\r | |
136 | IN FORM_DISPLAY_ENGINE_FORM *Form,\r | |
137 | IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r | |
138 | IN EFI_STRING PasswordString OPTIONAL\r | |
139 | );\r | |
140 | \r | |
141 | #define FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r | |
142 | \r | |
143 | //\r | |
144 | // Attribute for Statement and Form\r | |
145 | //\r | |
184f3a02 | 146 | #define HII_DISPLAY_NONE 0\r |
7c6c064c ED |
147 | #define HII_DISPLAY_GRAYOUT BIT0\r |
148 | #define HII_DISPLAY_LOCK BIT1\r | |
149 | #define HII_DISPLAY_READONLY BIT2\r | |
150 | #define HII_DISPLAY_MODAL BIT3\r | |
184f3a02 | 151 | #define HII_DISPLAY_SUPPRESS BIT4\r |
7c6c064c ED |
152 | \r |
153 | struct _FORM_DISPLAY_ENGINE_STATEMENT{\r | |
154 | UINTN Signature;\r | |
155 | //\r | |
156 | // Version for future structure extension\r | |
157 | //\r | |
158 | UINTN Version;\r | |
159 | //\r | |
160 | // link to all the statement which will show in the display form.\r | |
161 | //\r | |
162 | LIST_ENTRY DisplayLink;\r | |
163 | //\r | |
164 | // Pointer to statement opcode.\r | |
165 | // for Guided Opcode. All buffers will be here if GUIDED opcode scope is set.\r | |
166 | //\r | |
167 | EFI_IFR_OP_HEADER *OpCode;\r | |
168 | //\r | |
169 | // Question CurrentValue\r | |
170 | //\r | |
171 | EFI_HII_VALUE CurrentValue;\r | |
172 | //\r | |
173 | // Flag to describe whether setting is changed or not.\r | |
d1102dba | 174 | // Displayer may depend on it to show it with the different color.\r |
7c6c064c ED |
175 | //\r |
176 | BOOLEAN SettingChangedFlag;\r | |
177 | //\r | |
178 | // nested Statement list inside of EFI_IFR_SUBTITLE\r | |
179 | //\r | |
180 | LIST_ENTRY NestStatementList;\r | |
181 | //\r | |
182 | // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r | |
183 | //\r | |
184 | LIST_ENTRY OptionListHead;\r | |
185 | //\r | |
186 | // Statement attributes: GRAYOUT, LOCK and READONLY\r | |
187 | //\r | |
188 | UINT32 Attribute;\r | |
189 | \r | |
190 | //\r | |
191 | // ValidateQuestion to do InconsistIf check\r | |
192 | // It may be NULL if any value is valid.\r | |
193 | //\r | |
194 | VALIDATE_QUESTION ValidateQuestion;\r | |
d1102dba | 195 | \r |
7c6c064c ED |
196 | //\r |
197 | // Password additional check. It may be NULL when the additional check is not required.\r | |
198 | //\r | |
199 | PASSWORD_CHECK PasswordCheck;\r | |
200 | \r | |
201 | //\r | |
202 | // Statement ImageId and AnimationId\r | |
203 | //\r | |
204 | EFI_IMAGE_ID ImageId;\r | |
205 | EFI_ANIMATION_ID AnimationId;\r | |
206 | };\r | |
207 | \r | |
208 | #define FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_STATEMENT, DisplayLink, FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE)\r | |
209 | \r | |
210 | #define BROWSER_HOT_KEY_SIGNATURE SIGNATURE_32 ('B', 'H', 'K', 'S')\r | |
211 | \r | |
212 | typedef struct {\r | |
213 | UINTN Signature;\r | |
214 | LIST_ENTRY Link;\r | |
d1102dba | 215 | \r |
7c6c064c ED |
216 | EFI_INPUT_KEY *KeyData;\r |
217 | //\r | |
218 | // Action is Discard, Default, Submit, Reset and Exit.\r | |
219 | //\r | |
220 | UINT32 Action;\r | |
221 | UINT16 DefaultId;\r | |
222 | //\r | |
223 | // HotKey Help String\r | |
224 | //\r | |
225 | EFI_STRING HelpString;\r | |
226 | } BROWSER_HOT_KEY;\r | |
227 | \r | |
228 | #define BROWSER_HOT_KEY_FROM_LINK(a) CR (a, BROWSER_HOT_KEY, Link, BROWSER_HOT_KEY_SIGNATURE)\r | |
229 | \r | |
230 | #define FORM_DISPLAY_ENGINE_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r | |
231 | \r | |
232 | struct _FORM_DISPLAY_ENGINE_FORM {\r | |
233 | UINTN Signature;\r | |
234 | //\r | |
235 | // Version for future structure extension\r | |
236 | //\r | |
237 | UINTN Version;\r | |
238 | //\r | |
239 | // Statement List inside of Form\r | |
240 | //\r | |
241 | LIST_ENTRY StatementListHead;\r | |
242 | //\r | |
d1102dba | 243 | // Statement List outside of Form\r |
7c6c064c ED |
244 | //\r |
245 | LIST_ENTRY StatementListOSF;\r | |
246 | //\r | |
247 | // The input screen dimenstions info.\r | |
248 | //\r | |
249 | EFI_SCREEN_DESCRIPTOR *ScreenDimensions;\r | |
250 | //\r | |
251 | // FormSet information\r | |
252 | //\r | |
253 | EFI_GUID FormSetGuid;\r | |
254 | //\r | |
255 | // HiiHandle can be used to get String, Image or Animation\r | |
256 | //\r | |
257 | EFI_HII_HANDLE HiiHandle;\r | |
d1102dba | 258 | \r |
7c6c064c ED |
259 | //\r |
260 | // Form ID and Title.\r | |
261 | //\r | |
262 | UINT16 FormId;\r | |
263 | EFI_STRING_ID FormTitle;\r | |
264 | //\r | |
265 | // Form Attributes: Lock, Modal.\r | |
266 | //\r | |
267 | UINT32 Attribute;\r | |
268 | //\r | |
269 | // Flag to describe whether setting is changed or not.\r | |
270 | // Displayer depends on it to show ChangedFlag.\r | |
271 | //\r | |
272 | BOOLEAN SettingChangedFlag;\r | |
273 | \r | |
274 | //\r | |
275 | // Statement to be HighLighted\r | |
276 | //\r | |
277 | FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement;\r | |
278 | //\r | |
279 | // Event to notify Displayer that FormData is updated to be refreshed.\r | |
280 | //\r | |
281 | EFI_EVENT FormRefreshEvent;\r | |
282 | //\r | |
283 | // Additional Hotkey registered by BrowserEx protocol.\r | |
284 | //\r | |
285 | LIST_ENTRY HotKeyListHead;\r | |
286 | \r | |
287 | //\r | |
288 | // Form ImageId and AnimationId\r | |
289 | //\r | |
290 | EFI_IMAGE_ID ImageId;\r | |
291 | EFI_ANIMATION_ID AnimationId;\r | |
d1102dba | 292 | \r |
7c6c064c | 293 | //\r |
d1102dba | 294 | // If Status is error, display needs to handle it.\r |
7c6c064c ED |
295 | //\r |
296 | UINT32 BrowserStatus;\r | |
297 | //\r | |
d1102dba | 298 | // String for error status. It may be NULL.\r |
7c6c064c ED |
299 | //\r |
300 | EFI_STRING ErrorString;\r | |
301 | };\r | |
302 | \r | |
303 | #define FORM_DISPLAY_ENGINE_FORM_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_FORM, Link, FORM_DISPLAY_ENGINE_FORM_SIGNATURE)\r | |
304 | \r | |
305 | typedef struct {\r | |
306 | FORM_DISPLAY_ENGINE_STATEMENT *SelectedStatement; // Selected Statement and InputValue\r | |
d1102dba | 307 | \r |
7c6c064c | 308 | EFI_HII_VALUE InputValue;\r |
d1102dba | 309 | \r |
7c6c064c ED |
310 | UINT32 Action; // If SelectedStatement is NULL, Action will be used.\r |
311 | // Trig Action (Discard, Default, Submit, Reset and Exit)\r | |
312 | UINT16 DefaultId;\r | |
313 | } USER_INPUT;\r | |
314 | \r | |
315 | /**\r | |
316 | Display one form, and return user input.\r | |
d1102dba | 317 | \r |
7c6c064c ED |
318 | @param FormData Form Data to be shown.\r |
319 | @param UserInputData User input data.\r | |
d1102dba | 320 | \r |
7c6c064c ED |
321 | @retval EFI_SUCCESS Form Data is shown, and user input is got.\r |
322 | **/\r | |
323 | typedef\r | |
324 | EFI_STATUS\r | |
325 | (EFIAPI *FORM_DISPLAY) (\r | |
326 | IN FORM_DISPLAY_ENGINE_FORM *FormData,\r | |
327 | OUT USER_INPUT *UserInputData\r | |
328 | );\r | |
329 | \r | |
330 | /**\r | |
331 | Exit Display and Clear Screen to the original state.\r | |
332 | \r | |
333 | **/\r | |
334 | typedef\r | |
335 | VOID\r | |
336 | (EFIAPI *EXIT_DISPLAY) (\r | |
337 | VOID\r | |
338 | );\r | |
339 | \r | |
340 | /**\r | |
d1102dba LG |
341 | Confirm how to handle the changed data.\r |
342 | \r | |
7c6c064c ED |
343 | @return Action of Submit, Discard and None\r |
344 | **/\r | |
345 | typedef\r | |
346 | UINTN\r | |
347 | (EFIAPI *CONFIRM_DATA_CHANGE) (\r | |
348 | VOID\r | |
349 | );\r | |
350 | \r | |
351 | typedef struct {\r | |
352 | FORM_DISPLAY FormDisplay;\r | |
353 | EXIT_DISPLAY ExitDisplay;\r | |
354 | CONFIRM_DATA_CHANGE ConfirmDataChange;\r | |
355 | } EDKII_FORM_DISPLAY_ENGINE_PROTOCOL;\r | |
356 | \r | |
357 | extern EFI_GUID gEdkiiFormDisplayEngineProtocolGuid;\r | |
358 | #endif\r |