https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			353 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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
 |