--- /dev/null
+/** @file\r
+ FormDiplay protocol to show Form\r
+\r
+Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution. \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php. \r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __DISPLAY_PROTOCOL_H__\r
+#define __DISPLAY_PROTOCOL_H__\r
+\r
+#define FORM_DISPLAY_ENGINE_PROTOCOL_GUID \\r
+ { 0x9bbe29e9, 0xfda1, 0x41ec, { 0xad, 0x52, 0x45, 0x22, 0x13, 0x74, 0x2d, 0x2e } }\r
+\r
+#define FORM_DISPLAY_ENGINE_STATEMENT_VERSION 0x10000\r
+#define FORM_DISPLAY_ENGINE_VERSION 0x10000\r
+\r
+typedef struct _FORM_DISPLAY_ENGINE_PROTOCOL FORM_DISPLAY_ENGINE_PROTOCOL;\r
+\r
+typedef struct {\r
+ UINT8 Type; // HII Data Type\r
+ UINT8 *Buffer; // Buffer Data and Length if Type is EFI_IFR_TYPE_BUFFER or EFI_IFR_TYPE_STRING\r
+ UINT16 BufferLen;\r
+ EFI_IFR_TYPE_VALUE Value;\r
+} EFI_HII_VALUE;\r
+\r
+#define DISPLAY_QUESTION_OPTION_SIGNATURE SIGNATURE_32 ('Q', 'O', 'P', 'T')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ EFI_IFR_ONE_OF_OPTION OptionOpCode; // OneOfOption Data\r
+ EFI_IMAGE_ID ImageId; // Option ImageId and AnimationId\r
+ EFI_ANIMATION_ID AnimationId;\r
+} DISPLAY_QUESTION_OPTION;\r
+\r
+#define DISPLAY_QUESTION_OPTION_FROM_LINK(a) CR (a, DISPLAY_QUESTION_OPTION, Link, DISPLAY_QUESTION_OPTION_SIGNATURE)\r
+\r
+\r
+typedef struct _FORM_DISPLAY_ENGINE_STATEMENT FORM_DISPLAY_ENGINE_STATEMENT;\r
+\r
+//\r
+// Attribute for Statement and Form\r
+//\r
+#define HII_DISPLAY_GRAYOUT BIT0\r
+#define HII_DISPLAY_LOCK BIT1\r
+#define HII_DISPLAY_READONLY BIT2\r
+#define HII_DISPLAY_MODAL BIT3\r
+\r
+#define FORM_DISPLAY_ENGINE_FORM_SIGNATURE SIGNATURE_32 ('F', 'F', 'R', 'M')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ UINTN Version; // Version for future structure extension\r
+ LIST_ENTRY StatementListHead; // Statement List inside of Form\r
+ EFI_GUID FormSetGuid; // FormSet information\r
+ EFI_HII_HANDLE HiiHandle; // HiiHandle can be used to get String, Image or Animation\r
+ UINT16 FormId; // Form ID and Title.\r
+ EFI_STRING_ID FormTitle;\r
+ UINT32 Attribute; // Form Attributes: Lock, Modal.\r
+ BOOLEAN SettingChangedFlag; // Flag to describe whether setting is changed or not.\r
+ FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement; // Statement to be HighLighted\r
+ EFI_GUID *FormRefreshEventGuid; // EventGuid to notify Displayer that FormData is updated to be refreshed.\r
+ LIST_ENTRY HotKeyListHead; // Additional Hotkey registered by BrowserEx protocol.\r
+ EFI_IMAGE_ID ImageId; // Form ImageId and AnimationId\r
+ EFI_ANIMATION_ID AnimationId;\r
+} FORM_DISPLAY_ENGINE_FORM;\r
+\r
+#define FORM_DISPLAY_ENGINE_FORM_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_FORM, Link, FORM_DISPLAY_ENGINE_FORM_SIGNATURE)\r
+\r
+/**\r
+ Perform value check for a question.\r
+ \r
+ @param Form Form where Statement is in.\r
+ @param Statement Value will check for it.\r
+ @param Value New value will be checked.\r
+ \r
+ @retval TRUE Input Value is valid.\r
+ @retval FALSE Input Value is invalid.\r
+**/\r
+typedef\r
+BOOLEAN\r
+(EFIAPI *VALIDATE_QUESTION) (\r
+ IN FORM_DISPLAY_ENGINE_FORM *Form,\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r
+ IN EFI_HII_VALUE *Value\r
+ );\r
+\r
+/**\r
+ Perform Password check. \r
+ Passwork may be encrypted by driver that requires the specific check.\r
+ \r
+ @param Form Form where Password Statement is in.\r
+ @param Statement Password statement\r
+ @param PasswordString Password string to be checked. It may be NULL.\r
+ \r
+ @return Status Status of Password check.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *PASSWORD_CHECK) (\r
+ IN FORM_DISPLAY_ENGINE_FORM *Form,\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *Statement, \r
+ IN EFI_STRING *PasswordString OPTIONAL\r
+ );\r
+\r
+#define FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE SIGNATURE_32 ('F', 'S', 'T', 'A')\r
+\r
+struct _FORM_DISPLAY_ENGINE_STATEMENT{\r
+ UINTN Signature;\r
+ UINTN Version; // Version for future structure extension\r
+ LIST_ENTRY DisplayLink; // link to all the statement which will show in the display form.\r
+ EFI_IFR_OP_HEADER *OpCode; // Pointer to statement opcode.\r
+ // for Guided Opcode. All buffers will be here if GUIDED opcode scope is set.\r
+ EFI_HII_VALUE CurrentValue; // Question CurrentValue\r
+ BOOLEAN SettingChangedFlag; // Flag to describe whether setting is changed or not.\r
+ // Displayer may depend on it to show it with the different color.\r
+ LIST_ENTRY NestStatementList; // nested Statement list inside of EFI_IFR_SUBTITLE\r
+ LIST_ENTRY OptionListHead; // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
+ UINT32 Attribute; // Statement attributes: GRAYOUT, LOCK and READONLY\r
+ VALIDATE_QUESTION ValidateQuestion; // ValidateQuestion to do InconsistIf check\r
+ EFI_STRING_ID InConsistentStringId; // InConsistentString popup will be used when ValidateQuestion returns FASLE.\r
+ // If this ID is zero, then Display can customize error message for the invalid value.\r
+ PASSWORD_CHECK PasswordCheck; // Password additional check. It may be NULL when the additional check is not required.\r
+ EFI_IMAGE_ID ImageId; // Statement ImageId and AnimationId\r
+ EFI_ANIMATION_ID AnimationId;\r
+};\r
+\r
+#define FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK(a) CR (a, FORM_DISPLAY_ENGINE_STATEMENT, DisplayLink, FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE)\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+ EFI_INPUT_KEY KeyData;\r
+ UINT32 Action; // Action is Discard, Default, Submit, Reset and Exit.\r
+ UINT16 DefaultId;\r
+ EFI_STRING HelpString; // HotKey Help String\r
+} HOTKEY_INFO;\r
+\r
+typedef struct {\r
+ FORM_DISPLAY_ENGINE_STATEMENT *SelectedStatement; // Selected Statement and InputValue\r
+ EFI_HII_VALUE InputValue;\r
+ UINT32 Action; // If SelectedStatement is NULL, Action will be used.\r
+ // Trig Action (Discard, Default, Submit, Reset and Exit)\r
+ UINT16 DefaultId;\r
+} USER_INPUT;\r
+\r
+/**\r
+ Display one form, and return user input.\r
+ \r
+ @param FormData Form Data to be shown.\r
+ @param UserInputData User input data.\r
+ \r
+ @retval EFI_SUCCESS Form Data is shown, and user input is got.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *FORM_DISPLAY) (\r
+ IN FORM_DISPLAY_ENGINE_FORM *FormData,\r
+ OUT USER_INPUT *UserInputData\r
+);\r
+\r
+/**\r
+ Exit Display and Clear Screen to the original state.\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EXIT_DISPLAY) (\r
+ VOID\r
+);\r
+\r
+/**\r
+ Confirm how to handle the changed data. \r
+ \r
+ @return Action of Submit, Discard and None\r
+**/\r
+typedef\r
+UINTN\r
+(EFIAPI *CONFIRM_DATA_CHANGE) (\r
+ VOID\r
+);\r
+\r
+struct _FORM_DISPLAY_ENGINE_PROTOCOL {\r
+ FORM_DISPLAY FormDisplay;\r
+ EXIT_DISPLAY ExitDisplay;\r
+ CONFIRM_DATA_CHANGE ConfirmDataChange;\r
+};\r
+\r
+extern EFI_GUID gEfiFormDisplayEngineProtocolGuid;\r
+#endif\r