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