]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
MdeModulePkg: Clean up source files
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / FormDisplay.h
1 /** @file
2 FormDiplay protocol to show Form
3
4 Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __FORM_DISPLAY_H__
16 #define __FORM_DISPLAY_H__
17
18
19 #include <Library/UefiBootServicesTableLib.h>
20 #include <Library/DebugLib.h>
21 #include <Library/BaseMemoryLib.h>
22 #include <Library/BaseLib.h>
23 #include <Library/HiiLib.h>
24 #include <Library/MemoryAllocationLib.h>
25 #include <Library/PrintLib.h>
26 #include <Library/CustomizedDisplayLib.h>
27
28 #include <Protocol/FormBrowserEx2.h>
29 #include <Protocol/SimpleTextIn.h>
30 #include <Protocol/DisplayProtocol.h>
31 #include <Protocol/HiiPopup.h>
32
33 #include <Guid/MdeModuleHii.h>
34
35 //
36 // This is the generated header file which includes whatever needs to be exported (strings + IFR)
37 //
38 extern UINT8 DisplayEngineStrings[];
39 extern EFI_SCREEN_DESCRIPTOR gStatementDimensions;
40 extern USER_INPUT *gUserInput;
41 extern FORM_DISPLAY_ENGINE_FORM *gFormData;
42 extern EFI_HII_HANDLE gHiiHandle;
43 extern UINT16 gDirection;
44 extern LIST_ENTRY gMenuOption;
45 extern CHAR16 *gConfirmOptYes;
46 extern CHAR16 *gConfirmOptNo;
47 extern CHAR16 *gConfirmOptOk;
48 extern CHAR16 *gConfirmOptCancel;
49 extern CHAR16 *gYesOption;
50 extern CHAR16 *gNoOption;
51 extern CHAR16 *gOkOption;
52 extern CHAR16 *gCancelOption;
53 extern CHAR16 *gErrorPopup;
54 extern CHAR16 *gWarningPopup;
55 extern CHAR16 *gInfoPopup;
56
57 //
58 // Browser Global Strings
59 //
60 extern CHAR16 *gSaveFailed;
61 extern CHAR16 *gPromptForData;
62 extern CHAR16 *gPromptForPassword;
63 extern CHAR16 *gPromptForNewPassword;
64 extern CHAR16 *gConfirmPassword;
65 extern CHAR16 *gConfirmError;
66 extern CHAR16 *gPassowordInvalid;
67 extern CHAR16 *gPressEnter;
68 extern CHAR16 *gEmptyString;
69 extern CHAR16 *gMiniString;
70 extern CHAR16 *gOptionMismatch;
71 extern CHAR16 *gFormSuppress;
72 extern CHAR16 *gProtocolNotFound;
73 extern CHAR16 *gPasswordUnsupported;
74
75 extern CHAR16 gPromptBlockWidth;
76 extern CHAR16 gOptionBlockWidth;
77 extern CHAR16 gHelpBlockWidth;
78 extern CHAR16 *mUnknownString;
79 extern BOOLEAN gMisMatch;
80
81 //
82 // Screen definitions
83 //
84
85 #define LEFT_SKIPPED_COLUMNS 3
86 #define SCROLL_ARROW_HEIGHT 1
87 #define POPUP_PAD_SPACE_COUNT 5
88 #define POPUP_FRAME_WIDTH 2
89
90 #define UPPER_LOWER_CASE_OFFSET 0x20
91
92 //
93 // Display definitions
94 //
95 #define LEFT_ONEOF_DELIMITER L'<'
96 #define RIGHT_ONEOF_DELIMITER L'>'
97
98 #define LEFT_NUMERIC_DELIMITER L'['
99 #define RIGHT_NUMERIC_DELIMITER L']'
100
101 #define LEFT_CHECKBOX_DELIMITER L'['
102 #define RIGHT_CHECKBOX_DELIMITER L']'
103
104 #define CHECK_ON L'X'
105 #define CHECK_OFF L' '
106
107 #define TIME_SEPARATOR L':'
108 #define DATE_SEPARATOR L'/'
109
110 #define SUBTITLE_INDENT 2
111
112 //
113 // This is the Input Error Message
114 //
115 #define INPUT_ERROR 1
116
117 //
118 // This is the NV RAM update required Message
119 //
120 #define NV_UPDATE_REQUIRED 2
121 //
122 // Time definitions
123 //
124 #define ONE_SECOND 10000000
125
126 //
127 // It take 23 characters including the NULL to print a 64 bits number with "[" and "]".
128 // pow(2, 64) = [18446744073709551616]
129 // with extra '-' flat, set the width to 24.
130 //
131 #define MAX_NUMERIC_INPUT_WIDTH 24
132
133 #define EFI_HII_EXPRESSION_INCONSISTENT_IF 0
134 #define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1
135 #define EFI_HII_EXPRESSION_GRAY_OUT_IF 2
136 #define EFI_HII_EXPRESSION_SUPPRESS_IF 3
137 #define EFI_HII_EXPRESSION_DISABLE_IF 4
138
139 //
140 // Character definitions
141 //
142 #define CHAR_SPACE 0x0020
143
144 #define FORM_DISPLAY_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'D', 'D', 'V')
145 typedef struct {
146 UINT32 Signature;
147
148 EFI_HANDLE Handle;
149
150 //
151 // Produced protocol
152 //
153 EDKII_FORM_DISPLAY_ENGINE_PROTOCOL FromDisplayProt;
154 EFI_HII_POPUP_PROTOCOL HiiPopup;
155 } FORM_DISPLAY_DRIVER_PRIVATE_DATA;
156
157
158 typedef enum {
159 UiNoOperation,
160 UiSelect,
161 UiUp,
162 UiDown,
163 UiLeft,
164 UiRight,
165 UiReset,
166 UiPrevious,
167 UiPageUp,
168 UiPageDown,
169 UiHotKey,
170 UiMaxOperation
171 } UI_SCREEN_OPERATION;
172
173 typedef enum {
174 CfInitialization,
175 CfCheckSelection,
176 CfRepaint,
177 CfRefreshHighLight,
178 CfUpdateHelpString,
179 CfPrepareToReadKey,
180 CfReadKey,
181 CfScreenOperation,
182 CfUiSelect,
183 CfUiReset,
184 CfUiLeft,
185 CfUiRight,
186 CfUiUp,
187 CfUiPageUp,
188 CfUiPageDown,
189 CfUiDown,
190 CfUiNoOperation,
191 CfExit,
192 CfUiHotKey,
193 CfMaxControlFlag
194 } UI_CONTROL_FLAG;
195
196 typedef enum {
197 UIEventNone,
198 UIEventKey,
199 UIEventTimeOut,
200 UIEventDriver
201 } UI_EVENT_TYPE;
202
203 typedef struct {
204 UINT16 ScanCode;
205 UI_SCREEN_OPERATION ScreenOperation;
206 } SCAN_CODE_TO_SCREEN_OPERATION;
207
208 typedef struct {
209 UI_SCREEN_OPERATION ScreenOperation;
210 UI_CONTROL_FLAG ControlFlag;
211 } SCREEN_OPERATION_T0_CONTROL_FLAG;
212
213 typedef struct {
214 EFI_HII_HANDLE HiiHandle;
215 UINT16 FormId;
216
217 //
218 // Info for the highlight question.
219 // HLT means highlight
220 //
221 // If one statement has questionid, save questionid info to find the question.
222 // If one statement not has questionid info, save the opcode info to find the
223 // statement. If more than one statement has same opcode in one form(just like
224 // empty subtitle info may has more than one info one form), also use Index
225 // info to find the statement.
226 //
227 EFI_QUESTION_ID HLTQuestionId;
228 EFI_IFR_OP_HEADER *HLTOpCode;
229 UINTN HLTIndex;
230 UINTN HLTSequence;
231
232 //
233 // Info for the top of screen question.
234 // TOS means Top Of Screen
235 //
236 EFI_QUESTION_ID TOSQuestionId;
237 EFI_IFR_OP_HEADER *TOSOpCode;
238 UINTN TOSIndex;
239
240 UINT16 SkipValue;
241 } DISPLAY_HIGHLIGHT_MENU_INFO;
242
243 typedef struct {
244 EFI_EVENT SyncEvent;
245 UINT8 *TimeOut;
246 CHAR16 *ErrorInfo;
247 } WARNING_IF_CONTEXT;
248
249 #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
250
251 typedef struct {
252 UINTN Signature;
253 LIST_ENTRY Link;
254
255 EFI_HII_HANDLE Handle;
256 FORM_DISPLAY_ENGINE_STATEMENT *ThisTag;
257 UINT16 EntryNumber;
258
259 UINTN Row;
260 UINTN Col;
261 UINTN OptCol;
262 CHAR16 *Description;
263 UINTN Skip; // Number of lines
264
265 //
266 // Display item sequence for date/time
267 // Date: Month/Day/Year
268 // Sequence: 0 1 2
269 //
270 // Time: Hour : Minute : Second
271 // Sequence: 0 1 2
272 //
273 //
274 UINTN Sequence;
275
276 BOOLEAN GrayOut;
277 BOOLEAN ReadOnly;
278
279 //
280 // Whether user could change value of this item
281 //
282 BOOLEAN IsQuestion;
283 BOOLEAN NestInStatement;
284 } UI_MENU_OPTION;
285
286 #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
287
288 #define USER_SELECTABLE_OPTION_OK_WIDTH StrLen (gOkOption)
289 #define USER_SELECTABLE_OPTION_OK_CAL_WIDTH (StrLen (gOkOption) + StrLen (gCancelOption))
290 #define USER_SELECTABLE_OPTION_YES_NO_WIDTH (StrLen (gYesOption) + StrLen (gNoOption))
291 #define USER_SELECTABLE_OPTION_YES_NO_CAL_WIDTH (StrLen (gYesOption) + StrLen (gNoOption) + StrLen (gCancelOption))
292
293 #define USER_SELECTABLE_OPTION_SKIP_WIDTH 2
294
295 //
296 // +-------------------------------------------+ // POPUP_BORDER }
297 // | ERROR/WARNING/INFO | // POPUP_STYLE_STRING_HEIGHT } POPUP_HEADER_HEIGHT
298 // |-------------------------------------------| // POPUP_EMPTY_LINE_HEIGHT }
299 // | popup messages |
300 // | | // POPUP_EMPTY_LINE_HEIGHT }
301 // | user selectable options | // POPUP_USER_SELECTABLE_OPTION_HEIGHT } POPUP_FOOTER_HEIGHT
302 // +-------------------------------------------+ // POPUP_BORDER }
303 //
304 #define POPUP_BORDER 1
305 #define POPUP_EMPTY_LINE_HEIGHT 1
306 #define POPUP_STYLE_STRING_HEIGHT 1
307 #define POPUP_USER_SELECTABLE_OPTION_HEIGHT 1
308
309 #define POPUP_HEADER_HEIGHT (POPUP_BORDER + POPUP_STYLE_STRING_HEIGHT + POPUP_EMPTY_LINE_HEIGHT)
310 #define POPUP_FOOTER_HEIGHT (POPUP_EMPTY_LINE_HEIGHT + POPUP_USER_SELECTABLE_OPTION_HEIGHT + POPUP_BORDER)
311
312 #define USER_SELECTABLE_OPTION_SIGNATURE SIGNATURE_32 ('u', 's', 's', 'o')
313
314 typedef struct {
315 UINTN Signature;
316 LIST_ENTRY Link;
317 EFI_HII_POPUP_SELECTION OptionType;
318 CHAR16 *OptionString;
319 //
320 // Display item sequence for user select options
321 // Ok: Ok
322 // Sequence: 0
323 //
324 // Ok/Cancel: Ok : Cancel
325 // Sequence: 0 1
326 //
327 // Yes/No: Yes : No
328 // Sequence: 0 1
329 //
330 // Yes/No/Cancel: Yes : No: Cancel
331 // Sequence: 0 1 2
332 //
333 UINTN Sequence;
334 UINTN OptionRow;
335 UINTN OptionCol;
336 UINTN MaxSequence;
337 UINTN MinSequence;
338 } USER_SELECTABLE_OPTION;
339
340 #define SELECTABLE_OPTION_FROM_LINK(a) CR (a, USER_SELECTABLE_OPTION, Link, USER_SELECTABLE_OPTION_SIGNATURE)
341
342 /**
343 Print Question Value according to it's storage width and display attributes.
344
345 @param Question The Question to be printed.
346 @param FormattedNumber Buffer for output string.
347 @param BufferSize The FormattedNumber buffer size in bytes.
348
349 @retval EFI_SUCCESS Print success.
350 @retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
351
352 **/
353 EFI_STATUS
354 PrintFormattedNumber (
355 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
356 IN OUT CHAR16 *FormattedNumber,
357 IN UINTN BufferSize
358 );
359
360 /**
361 Set value of a data element in an Array by its Index.
362
363 @param Array The data array.
364 @param Type Type of the data in this array.
365 @param Index Zero based index for data in this array.
366 @param Value The value to be set.
367
368 **/
369 VOID
370 SetArrayData (
371 IN VOID *Array,
372 IN UINT8 Type,
373 IN UINTN Index,
374 IN UINT64 Value
375 );
376
377 /**
378 Return data element in an Array by its Index.
379
380 @param Array The data array.
381 @param Type Type of the data in this array.
382 @param Index Zero based index for data in this array.
383
384 @retval Value The data to be returned
385
386 **/
387 UINT64
388 GetArrayData (
389 IN VOID *Array,
390 IN UINT8 Type,
391 IN UINTN Index
392 );
393
394 /**
395 Search an Option of a Question by its value.
396
397 @param Question The Question
398 @param OptionValue Value for Option to be searched.
399
400 @retval Pointer Pointer to the found Option.
401 @retval NULL Option not found.
402
403 **/
404 DISPLAY_QUESTION_OPTION *
405 ValueToOption (
406 IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
407 IN EFI_HII_VALUE *OptionValue
408 );
409
410 /**
411 Compare two Hii value.
412
413 @param Value1 Expression value to compare on left-hand.
414 @param Value2 Expression value to compare on right-hand.
415 @param Result Return value after compare.
416 retval 0 Two operators equal.
417 return Positive value if Value1 is greater than Value2.
418 retval Negative value if Value1 is less than Value2.
419 @param HiiHandle Only required for string compare.
420
421 @retval other Could not perform compare on two values.
422 @retval EFI_SUCCESS Compare the value success.
423
424 **/
425 EFI_STATUS
426 CompareHiiValue (
427 IN EFI_HII_VALUE *Value1,
428 IN EFI_HII_VALUE *Value2,
429 OUT INTN *Result,
430 IN EFI_HII_HANDLE HiiHandle OPTIONAL
431 );
432
433 /**
434 Draw a pop up windows based on the dimension, number of lines and
435 strings specified.
436
437 @param RequestedWidth The width of the pop-up.
438 @param NumberOfLines The number of lines.
439 @param ... A series of text strings that displayed in the pop-up.
440
441 **/
442 VOID
443 EFIAPI
444 CreateMultiStringPopUp (
445 IN UINTN RequestedWidth,
446 IN UINTN NumberOfLines,
447 ...
448 );
449
450 /**
451 Will copy LineWidth amount of a string in the OutputString buffer and return the
452 number of CHAR16 characters that were copied into the OutputString buffer.
453 The output string format is:
454 Glyph Info + String info + '\0'.
455
456 In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
457
458 @param InputString String description for this option.
459 @param LineWidth Width of the desired string to extract in CHAR16
460 characters
461 @param GlyphWidth The glyph width of the begin of the char in the string.
462 @param Index Where in InputString to start the copy process
463 @param OutputString Buffer to copy the string into
464
465 @return Returns the number of CHAR16 characters that were copied into the OutputString
466 buffer, include extra glyph info and '\0' info.
467
468 **/
469 UINT16
470 GetLineByWidth (
471 IN CHAR16 *InputString,
472 IN UINT16 LineWidth,
473 IN OUT UINT16 *GlyphWidth,
474 IN OUT UINTN *Index,
475 OUT CHAR16 **OutputString
476 );
477
478
479 /**
480 Get the string based on the StringId and HII Package List Handle.
481
482 @param Token The String's ID.
483 @param HiiHandle The Hii handle for this string package.
484
485 @return The output string.
486
487 **/
488 CHAR16 *
489 GetToken (
490 IN EFI_STRING_ID Token,
491 IN EFI_HII_HANDLE HiiHandle
492 );
493
494 /**
495 Count the storage space of a Unicode string.
496
497 This function handles the Unicode string with NARROW_CHAR
498 and WIDE_CHAR control characters. NARROW_HCAR and WIDE_CHAR
499 does not count in the resultant output. If a WIDE_CHAR is
500 hit, then 2 Unicode character will consume an output storage
501 space with size of CHAR16 till a NARROW_CHAR is hit.
502
503 If String is NULL, then ASSERT ().
504
505 @param String The input string to be counted.
506
507 @return Storage space for the input string.
508
509 **/
510 UINTN
511 GetStringWidth (
512 IN CHAR16 *String
513 );
514
515 /**
516 This routine reads a numeric value from the user input.
517
518 @param MenuOption Pointer to the current input menu.
519
520 @retval EFI_SUCCESS If numerical input is read successfully
521 @retval EFI_DEVICE_ERROR If operation fails
522
523 **/
524 EFI_STATUS
525 GetNumericInput (
526 IN UI_MENU_OPTION *MenuOption
527 );
528
529 /**
530 Get string or password input from user.
531
532 @param MenuOption Pointer to the current input menu.
533 @param Prompt The prompt string shown on popup window.
534 @param StringPtr Old user input and destination for use input string.
535
536 @retval EFI_SUCCESS If string input is read successfully
537 @retval EFI_DEVICE_ERROR If operation fails
538
539 **/
540 EFI_STATUS
541 ReadString (
542 IN UI_MENU_OPTION *MenuOption,
543 IN CHAR16 *Prompt,
544 IN OUT CHAR16 *StringPtr
545 );
546
547 /**
548 Draw a pop up windows based on the dimension, number of lines and
549 strings specified.
550
551 @param RequestedWidth The width of the pop-up.
552 @param NumberOfLines The number of lines.
553 @param Marker The variable argument list for the list of string to be printed.
554
555 **/
556 VOID
557 CreateSharedPopUp (
558 IN UINTN RequestedWidth,
559 IN UINTN NumberOfLines,
560 IN VA_LIST Marker
561 );
562
563 /**
564 Wait for a key to be pressed by user.
565
566 @param Key The key which is pressed by user.
567
568 @retval EFI_SUCCESS The function always completed successfully.
569
570 **/
571 EFI_STATUS
572 WaitForKeyStroke (
573 OUT EFI_INPUT_KEY *Key
574 );
575
576 /**
577 Get selection for OneOf and OrderedList (Left/Right will be ignored).
578
579 @param MenuOption Pointer to the current input menu.
580
581 @retval EFI_SUCCESS If Option input is processed successfully
582 @retval EFI_DEVICE_ERROR If operation fails
583
584 **/
585 EFI_STATUS
586 GetSelectionInputPopUp (
587 IN UI_MENU_OPTION *MenuOption
588 );
589
590 /**
591 Process the help string: Split StringPtr to several lines of strings stored in
592 FormattedString and the glyph width of each line cannot exceed gHelpBlockWidth.
593
594 @param StringPtr The entire help string.
595 @param FormattedString The oupput formatted string.
596 @param EachLineWidth The max string length of each line in the formatted string.
597 @param RowCount TRUE: if Question is selected.
598
599 **/
600 UINTN
601 ProcessHelpString (
602 IN CHAR16 *StringPtr,
603 OUT CHAR16 **FormattedString,
604 OUT UINT16 *EachLineWidth,
605 IN UINTN RowCount
606 );
607
608 /**
609 Process a Question's Option (whether selected or un-selected).
610
611 @param MenuOption The MenuOption for this Question.
612 @param Selected TRUE: if Question is selected.
613 @param OptionString Pointer of the Option String to be displayed.
614 @param SkipErrorValue Whether need to return when value without option for it.
615
616 @retval EFI_SUCCESS Question Option process success.
617 @retval Other Question Option process fail.
618
619 **/
620 EFI_STATUS
621 ProcessOptions (
622 IN UI_MENU_OPTION *MenuOption,
623 IN BOOLEAN Selected,
624 OUT CHAR16 **OptionString,
625 IN BOOLEAN SkipErrorValue
626 );
627
628 /**
629 Set Buffer to Value for Size bytes.
630
631 @param Buffer Memory to set.
632 @param Size Number of bytes to set
633 @param Value Value of the set operation.
634
635 **/
636 VOID
637 SetUnicodeMem (
638 IN VOID *Buffer,
639 IN UINTN Size,
640 IN CHAR16 Value
641 );
642
643 /**
644 Display one form, and return user input.
645
646 @param FormData Form Data to be shown.
647 @param UserInputData User input data.
648
649 @retval EFI_SUCCESS Form Data is shown, and user input is got.
650 **/
651 EFI_STATUS
652 EFIAPI
653 FormDisplay (
654 IN FORM_DISPLAY_ENGINE_FORM *FormData,
655 OUT USER_INPUT *UserInputData
656 );
657
658 /**
659 Clear Screen to the initial state.
660 **/
661 VOID
662 EFIAPI
663 DriverClearDisplayPage (
664 VOID
665 );
666
667 /**
668 Exit Display and Clear Screen to the original state.
669
670 **/
671 VOID
672 EFIAPI
673 ExitDisplay (
674 VOID
675 );
676
677 /**
678 Process nothing.
679
680 @param Event The Event need to be process
681 @param Context The context of the event.
682
683 **/
684 VOID
685 EFIAPI
686 EmptyEventProcess (
687 IN EFI_EVENT Event,
688 IN VOID *Context
689 );
690
691 /**
692 Process for the refresh interval statement.
693
694 @param Event The Event need to be process
695 @param Context The context of the event.
696
697 **/
698 VOID
699 EFIAPI
700 RefreshTimeOutProcess (
701 IN EFI_EVENT Event,
702 IN VOID *Context
703 );
704
705 /**
706 Record the highlight menu and top of screen menu info.
707
708 @param Highlight The menu opton which is highlight.
709 @param TopOfScreen The menu opton which is at the top of the form.
710 @param SkipValue The skip line info for the top of screen menu.
711
712 **/
713 VOID
714 UpdateHighlightMenuInfo (
715 IN LIST_ENTRY *Highlight,
716 IN LIST_ENTRY *TopOfScreen,
717 IN UINTN SkipValue
718 );
719
720 /**
721 Displays a popup window.
722
723 @param This A pointer to the EFI_HII_POPUP_PROTOCOL instance.
724 @param PopupStyle Popup style to use.
725 @param PopupType Type of the popup to display.
726 @param HiiHandle HII handle of the string pack containing Message
727 @param Message A message to display in the popup box.
728 @param UserSelection User selection.
729
730 @retval EFI_SUCCESS The popup box was successfully displayed.
731 @retval EFI_INVALID_PARAMETER HiiHandle and Message do not define a valid HII string.
732 @retval EFI_INVALID_PARAMETER PopupType is not one of the values defined by this specification.
733 @retval EFI_OUT_OF_RESOURCES There are not enough resources available to display the popup box.
734
735 **/
736 EFI_STATUS
737 EFIAPI
738 CreatePopup (
739 IN EFI_HII_POPUP_PROTOCOL *This,
740 IN EFI_HII_POPUP_STYLE PopupStyle,
741 IN EFI_HII_POPUP_TYPE PopupType,
742 IN EFI_HII_HANDLE HiiHandle,
743 IN EFI_STRING_ID Message,
744 OUT EFI_HII_POPUP_SELECTION *UserSelection OPTIONAL
745 );
746
747 #endif