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