1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
|
/** @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 dimensions 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
|