| /** @file | |
| FormDiplay protocol to show Form | |
| Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __DISPLAY_PROTOCOL_H__ | |
| #define __DISPLAY_PROTOCOL_H__ | |
| #include <Protocol/FormBrowser2.h> | |
| #define EDKII_FORM_DISPLAY_ENGINE_PROTOCOL_GUID \ | |
| { 0x9bbe29e9, 0xfda1, 0x41ec, { 0xad, 0x52, 0x45, 0x22, 0x13, 0x74, 0x2d, 0x2e } } | |
| // | |
| // Do nothing. | |
| // | |
| #define BROWSER_ACTION_NONE BIT16 | |
| // | |
| // ESC Exit | |
| // | |
| #define BROWSER_ACTION_FORM_EXIT BIT17 | |
| #define BROWSER_SUCCESS 0x0 | |
| #define BROWSER_ERROR BIT31 | |
| #define BROWSER_SUBMIT_FAIL BROWSER_ERROR | 0x01 | |
| #define BROWSER_NO_SUBMIT_IF BROWSER_ERROR | 0x02 | |
| #define BROWSER_FORM_NOT_FOUND BROWSER_ERROR | 0x03 | |
| #define BROWSER_FORM_SUPPRESS BROWSER_ERROR | 0x04 | |
| #define BROWSER_PROTOCOL_NOT_FOUND BROWSER_ERROR | 0x05 | |
| #define BROWSER_INCONSISTENT_IF BROWSER_ERROR | 0x06 | |
| #define BROWSER_WARNING_IF BROWSER_ERROR | 0x07 | |
| #define BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF BROWSER_ERROR | 0x08 | |
| #define BROWSER_RECONNECT_REQUIRED BROWSER_ERROR | 0x09 | |
| #define BROWSER_RECONNECT_FAIL BROWSER_ERROR | 0x0A | |
| #define BROWSER_RECONNECT_SAVE_CHANGES BROWSER_ERROR | 0x0B | |
| #define FORM_DISPLAY_ENGINE_STATEMENT_VERSION_1 0x10000 | |
| #define FORM_DISPLAY_ENGINE_VERSION_1 0x10000 | |
| typedef struct { | |
| // | |
| // HII Data Type | |
| // | |
| UINT8 Type; | |
| // | |
| // Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING | |
| // | |
| UINT8 *Buffer; | |
| UINT16 BufferLen; | |
| EFI_IFR_TYPE_VALUE Value; | |
| } EFI_HII_VALUE; | |
| #define DISPLAY_QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T') | |
| typedef struct { | |
| UINTN Signature; | |
| LIST_ENTRY Link; | |
| // | |
| // OneOfOption Data | |
| // | |
| EFI_IFR_ONE_OF_OPTION *OptionOpCode; | |
| // | |
| // Option ImageId and AnimationId | |
| // | |
| EFI_IMAGE_ID ImageId; | |
| EFI_ANIMATION_ID AnimationId; | |
| } DISPLAY_QUESTION_OPTION; | |
| #define DISPLAY_QUESTION_OPTION_FROM_LINK(a) CR (a, DISPLAY_QUESTION_OPTION, Link, DISPLAY_QUESTION_OPTION_SIGNATURE) | |
| typedef struct _FORM_DISPLAY_ENGINE_STATEMENT FORM_DISPLAY_ENGINE_STATEMENT; | |
| typedef struct _FORM_DISPLAY_ENGINE_FORM FORM_DISPLAY_ENGINE_FORM; | |
| #define STATEMENT_VALID 0x0 | |
| #define STATEMENT_INVALID BIT31 | |
| #define INCOSISTENT_IF_TRUE STATEMENT_INVALID | 0x01 | |
| #define WARNING_IF_TRUE STATEMENT_INVALID | 0x02 | |
| #define STRING_TOO_LONG STATEMENT_INVALID | 0x03 | |
| // ... to be extended. | |
| typedef struct { | |
| // | |
| // StringId for INCONSITENT_IF or WARNING_IF | |
| // | |
| EFI_STRING_ID StringId; | |
| // | |
| // TimeOut for WARNING_IF | |
| // | |
| UINT8 TimeOut; | |
| } STATEMENT_ERROR_INFO; | |
| /** | |
| Perform value check for a question. | |
| @param Form Form where Statement is in. | |
| @param Statement Value will check for it. | |
| @param Value New value will be checked. | |
| @retval Status Value Status | |
| **/ | |
| typedef | |
| UINT32 | |
| (EFIAPI *VALIDATE_QUESTION)( | |
| IN FORM_DISPLAY_ENGINE_FORM *Form, | |
| IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, | |
| IN EFI_HII_VALUE *Value, | |
| OUT STATEMENT_ERROR_INFO *ErrorInfo | |
| ); | |
| /** | |
| Perform Password check. | |
| Passwork may be encrypted by driver that requires the specific check. | |
| @param Form Form where Password Statement is in. | |
| @param Statement Password statement | |
| @param PasswordString Password string to be checked. It may be NULL. | |
| NULL means to restore password. | |
| "" string can be used to checked whether old password does exist. | |
| @return Status Status of Password check. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *PASSWORD_CHECK)( | |
| IN FORM_DISPLAY_ENGINE_FORM *Form, | |
| IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, | |
| IN EFI_STRING PasswordString OPTIONAL | |
| ); | |
| #define FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A') | |
| // | |
| // Attribute for Statement and Form | |
| // | |
| #define HII_DISPLAY_NONE 0 | |
| #define HII_DISPLAY_GRAYOUT BIT0 | |
| #define HII_DISPLAY_LOCK BIT1 | |
| #define HII_DISPLAY_READONLY BIT2 | |
| #define HII_DISPLAY_MODAL BIT3 | |
| #define HII_DISPLAY_SUPPRESS BIT4 | |
| struct _FORM_DISPLAY_ENGINE_STATEMENT { | |
| UINTN Signature; | |
| // | |
| // Version for future structure extension | |
| // | |
| UINTN Version; | |
| // | |
| // link to all the statement which will show in the display form. | |
| // | |
| LIST_ENTRY DisplayLink; | |
| // | |
| // Pointer to statement opcode. | |
| // for Guided Opcode. All buffers will be here if GUIDED opcode scope is set. | |
| // | |
| EFI_IFR_OP_HEADER *OpCode; | |
| // | |
| // Question CurrentValue | |
| // | |
| EFI_HII_VALUE CurrentValue; | |
| // | |
| // Flag to describe whether setting is changed or not. | |
| // Displayer may depend on it to show it with the different color. | |
| // | |
| BOOLEAN SettingChangedFlag; | |
| // | |
| // nested Statement list inside of EFI_IFR_SUBTITLE | |
| // | |
| LIST_ENTRY NestStatementList; | |
| // | |
| // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION) | |
| // | |
| LIST_ENTRY OptionListHead; | |
| // | |
| // Statement attributes: GRAYOUT, LOCK and READONLY | |
| // | |
| UINT32 Attribute; | |
| // | |
| // ValidateQuestion to do InconsistIf check | |
| // It may be NULL if any value is valid. | |
| // | |
| VALIDATE_QUESTION ValidateQuestion; | |
| // | |
| // Password additional check. It may be NULL when the additional check is not required. | |
| // | |
| PASSWORD_CHECK PasswordCheck; | |
| // | |
| // Statement ImageId and AnimationId | |
| // | |
| EFI_IMAGE_ID ImageId; | |
| EFI_ANIMATION_ID AnimationId; | |
| }; | |
| #define FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_STATEMENT, DisplayLink, FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE) | |
| #define BROWSER_HOT_KEY_SIGNATURE SIGNATURE_32 ('B', 'H', 'K', 'S') | |
| typedef struct { | |
| UINTN Signature; | |
| LIST_ENTRY Link; | |
| EFI_INPUT_KEY *KeyData; | |
| // | |
| // Action is Discard, Default, Submit, Reset and Exit. | |
| // | |
| UINT32 Action; | |
| UINT16 DefaultId; | |
| // | |
| // HotKey Help String | |
| // | |
| EFI_STRING HelpString; | |
| } BROWSER_HOT_KEY; | |
| #define BROWSER_HOT_KEY_FROM_LINK(a) CR (a, BROWSER_HOT_KEY, Link, BROWSER_HOT_KEY_SIGNATURE) | |
| #define FORM_DISPLAY_ENGINE_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M') | |
| struct _FORM_DISPLAY_ENGINE_FORM { | |
| UINTN Signature; | |
| // | |
| // Version for future structure extension | |
| // | |
| UINTN Version; | |
| // | |
| // Statement List inside of Form | |
| // | |
| LIST_ENTRY StatementListHead; | |
| // | |
| // Statement List outside of Form | |
| // | |
| LIST_ENTRY StatementListOSF; | |
| // | |
| // The input screen dimenstions info. | |
| // | |
| EFI_SCREEN_DESCRIPTOR *ScreenDimensions; | |
| // | |
| // FormSet information | |
| // | |
| EFI_GUID FormSetGuid; | |
| // | |
| // HiiHandle can be used to get String, Image or Animation | |
| // | |
| EFI_HII_HANDLE HiiHandle; | |
| // | |
| // Form ID and Title. | |
| // | |
| UINT16 FormId; | |
| EFI_STRING_ID FormTitle; | |
| // | |
| // Form Attributes: Lock, Modal. | |
| // | |
| UINT32 Attribute; | |
| // | |
| // Flag to describe whether setting is changed or not. | |
| // Displayer depends on it to show ChangedFlag. | |
| // | |
| BOOLEAN SettingChangedFlag; | |
| // | |
| // Statement to be HighLighted | |
| // | |
| FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement; | |
| // | |
| // Event to notify Displayer that FormData is updated to be refreshed. | |
| // | |
| EFI_EVENT FormRefreshEvent; | |
| // | |
| // Additional Hotkey registered by BrowserEx protocol. | |
| // | |
| LIST_ENTRY HotKeyListHead; | |
| // | |
| // Form ImageId and AnimationId | |
| // | |
| EFI_IMAGE_ID ImageId; | |
| EFI_ANIMATION_ID AnimationId; | |
| // | |
| // If Status is error, display needs to handle it. | |
| // | |
| UINT32 BrowserStatus; | |
| // | |
| // String for error status. It may be NULL. | |
| // | |
| EFI_STRING ErrorString; | |
| }; | |
| #define FORM_DISPLAY_ENGINE_FORM_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_FORM, Link, FORM_DISPLAY_ENGINE_FORM_SIGNATURE) | |
| typedef struct { | |
| FORM_DISPLAY_ENGINE_STATEMENT *SelectedStatement; // Selected Statement and InputValue | |
| EFI_HII_VALUE InputValue; | |
| UINT32 Action; // If SelectedStatement is NULL, Action will be used. | |
| // Trig Action (Discard, Default, Submit, Reset and Exit) | |
| UINT16 DefaultId; | |
| } USER_INPUT; | |
| /** | |
| Display one form, and return user input. | |
| @param FormData Form Data to be shown. | |
| @param UserInputData User input data. | |
| @retval EFI_SUCCESS Form Data is shown, and user input is got. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FORM_DISPLAY)( | |
| IN FORM_DISPLAY_ENGINE_FORM *FormData, | |
| OUT USER_INPUT *UserInputData | |
| ); | |
| /** | |
| Exit Display and Clear Screen to the original state. | |
| **/ | |
| typedef | |
| VOID | |
| (EFIAPI *EXIT_DISPLAY)( | |
| VOID | |
| ); | |
| /** | |
| Confirm how to handle the changed data. | |
| @return Action of Submit, Discard and None | |
| **/ | |
| typedef | |
| UINTN | |
| (EFIAPI *CONFIRM_DATA_CHANGE)( | |
| VOID | |
| ); | |
| typedef struct { | |
| FORM_DISPLAY FormDisplay; | |
| EXIT_DISPLAY ExitDisplay; | |
| CONFIRM_DATA_CHANGE ConfirmDataChange; | |
| } EDKII_FORM_DISPLAY_ENGINE_PROTOCOL; | |
| extern EFI_GUID gEdkiiFormDisplayEngineProtocolGuid; | |
| #endif |