mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-11 14:28:08 +01:00
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
|