3 The definition of CFormPkg's member function
5 Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef _EFIIFRCLASS_H_
17 #define _EFIIFRCLASS_H_
22 #include "VfrUtilityLib.h"
24 #define NO_QST_REFED "no question refered"
32 * The functions below are used for flags setting
34 static inline BOOLEAN
_FLAGS_ZERO (
41 static inline VOID
_FLAG_CLEAR (
49 static inline UINT8
_FLAG_TEST_AND_CLEAR (
54 UINT8 Ret
= Flags
& Mask
;
59 static inline UINT8
_IS_EQUAL (
64 return Flags
== Value
;
68 * The definition of CIfrBin
75 struct SPendingAssign
{
76 CHAR8
*mKey
; // key ! unique
82 struct SPendingAssign
*mNext
;
84 SPendingAssign (IN CHAR8
*, IN VOID
*, IN UINT32
, IN UINT32
, IN CONST CHAR8
*);
87 VOID
SetAddrAndLen (IN VOID
*, IN UINT32
);
88 VOID
AssignValue (IN VOID
*, IN UINT32
);
89 CHAR8
* GetKey (VOID
);
96 struct SBufferNode
*mNext
;
102 SBufferNode
*mBufferNodeQueueHead
;
103 SBufferNode
*mBufferNodeQueueTail
;
104 SBufferNode
*mCurrBufferNode
;
106 SBufferNode
*mReadBufferNode
;
107 UINT32 mReadBufferOffset
;
111 VOID
_WRITE_PKG_LINE (IN
FILE *, IN UINT32
, IN CONST CHAR8
*, IN CHAR8
*, IN UINT32
);
112 VOID
_WRITE_PKG_END (IN
FILE *, IN UINT32
, IN CONST CHAR8
*, IN CHAR8
*, IN UINT32
);
115 SPendingAssign
*PendingAssignList
;
118 CFormPkg (IN UINT32 BufferSize
);
121 CHAR8
* IfrBinBufferGet (IN UINT32
);
122 inline UINT32
GetPkgLength (VOID
);
125 UINT32
Read (IN CHAR8
*, IN UINT32
);
128 EFI_VFR_RETURN_CODE
BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER
**);
129 EFI_VFR_RETURN_CODE
BuildPkg (IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
130 EFI_VFR_RETURN_CODE
BuildPkg (OUT PACKAGE_DATA
&);
131 EFI_VFR_RETURN_CODE
GenCFile (IN CHAR8
*, IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
134 EFI_VFR_RETURN_CODE
AssignPending (IN CHAR8
*, IN VOID
*, IN UINT32
, IN UINT32
, IN CONST CHAR8
*Msg
= NULL
);
135 VOID
DoPendingAssign (IN CHAR8
*, IN VOID
*, IN UINT32
);
136 bool HavePendingUnassigned (VOID
);
137 VOID
PendingAssignPrintAll (VOID
);
138 EFI_VFR_RETURN_CODE
DeclarePendingQuestion (
139 IN CVfrVarDataTypeDB
&lCVfrVarDataTypeDB
,
140 IN CVfrDataStorage
&lCVfrDataStorage
,
141 IN CVfrQuestionDB
&lCVfrQuestionDB
,
142 IN EFI_GUID
*LocalFormSetGuid
,
147 extern CFormPkg gCFormPkg
;
160 #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
161 #define EFI_IFR_RECORDINFO_IDX_START 0x0
163 class CIfrRecordInfoDB
{
167 SIfrRecord
*mIfrRecordListHead
;
168 SIfrRecord
*mIfrRecordListTail
;
170 SIfrRecord
* GetRecordInfoFromIdx (IN UINT32
);
171 BOOLEAN
CheckQuestionOpCode (IN UINT8
);
172 BOOLEAN
CheckIdOpCode (IN UINT8
);
173 EFI_QUESTION_ID
GetOpcodeQuestionId (IN EFI_IFR_OP_HEADER
*);
175 CIfrRecordInfoDB (VOID
);
176 ~CIfrRecordInfoDB (VOID
);
178 inline VOID
TurnOn (VOID
) {
182 inline VOID
TurnOff (VOID
) {
186 UINT32
IfrRecordRegister (IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
187 VOID
IfrRecordInfoUpdate (IN UINT32
, IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
188 VOID
IfrRecordOutput (IN
FILE *, IN UINT32 LineNo
);
189 VOID
IfrRecordOutput (OUT PACKAGE_DATA
&);
190 EFI_VFR_RETURN_CODE
IfrRecordAdjust (VOID
);
193 extern CIfrRecordInfoDB gCIfrRecordInfoDB
;
196 * The definition of CIfrObj
198 extern BOOLEAN gCreateOp
;
211 CIfrObj (IN UINT8 OpCode
, OUT CHAR8
**IfrObj
= NULL
, IN UINT8 ObjBinLen
= 0, IN BOOLEAN DelayEmit
= FALSE
);
212 virtual ~CIfrObj(VOID
);
214 VOID
_EMIT_PENDING_OBJ (VOID
);
216 inline VOID
SetLineNo (IN UINT32 LineNo
) {
220 inline CHAR8
* GetObjBinAddr (VOID
) {
224 inline UINT8
GetObjBinLen (VOID
) {
228 inline bool ExpendObjBin (IN UINT8 Size
) {
229 if ((mDelayEmit
== TRUE
) && ((mObjBinLen
+ Size
) > mObjBinLen
)) {
230 mObjBinLen
= mObjBinLen
+ Size
;
239 * The definition of CIfrOpHeader
243 EFI_IFR_OP_HEADER
*mHeader
;
246 CIfrOpHeader (IN UINT8 OpCode
, IN VOID
*StartAddr
, IN UINT8 Length
= 0);
247 CIfrOpHeader (IN CIfrOpHeader
&);
249 VOID
IncLength (UINT8 Size
) {
250 if ((mHeader
->Length
+ Size
) > mHeader
->Length
) {
251 mHeader
->Length
= mHeader
->Length
+ Size
;
255 VOID
DecLength (UINT8 Size
) {
256 if (mHeader
->Length
>= Size
) {
262 return mHeader
->Length
;
266 return mHeader
->Scope
;
269 VOID
SetScope (IN UINT8 Scope
) {
270 mHeader
->Scope
= Scope
;
273 VOID
UpdateHeader (IN EFI_IFR_OP_HEADER
*Header
) {
278 extern UINT8 gScopeCount
;
281 * The definition of CIfrStatementHeader
283 class CIfrStatementHeader
{
285 EFI_IFR_STATEMENT_HEADER
*mHeader
;
288 CIfrStatementHeader (
289 IN EFI_IFR_STATEMENT_HEADER
*StartAddr
290 ) : mHeader ((EFI_IFR_STATEMENT_HEADER
*)StartAddr
) {
292 mHeader
->Help
= EFI_STRING_ID_INVALID
;
293 mHeader
->Prompt
= EFI_STRING_ID_INVALID
;
296 EFI_IFR_STATEMENT_HEADER
*GetStatementHeader () {
300 VOID
SetPrompt (IN EFI_STRING_ID Prompt
) {
301 mHeader
->Prompt
= Prompt
;
304 VOID
SetHelp (IN EFI_STRING_ID Help
) {
305 mHeader
->Help
= Help
;
310 * The definition of CIfrQuestionHeader
312 #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
314 class CIfrQuestionHeader
: public CIfrStatementHeader
{
316 EFI_IFR_QUESTION_HEADER
*mHeader
;
318 EFI_IFR_STATEMENT_HEADER
* QH2SH (EFI_IFR_QUESTION_HEADER
*Qheader
) {
319 return &(Qheader
)->Header
;
323 EFI_QUESTION_ID
QUESTION_ID (VOID
) {
324 return mHeader
->QuestionId
;
327 EFI_VARSTORE_ID
VARSTORE_ID (VOID
) {
328 return mHeader
->VarStoreId
;
331 VOID
VARSTORE_INFO (OUT EFI_VARSTORE_INFO
*Info
) {
333 Info
->mVarStoreId
= mHeader
->VarStoreId
;
334 memcpy (&Info
->mVarStoreId
, &mHeader
->VarStoreInfo
, sizeof (Info
->mVarStoreId
));
339 return mHeader
->Flags
;
344 IN EFI_IFR_QUESTION_HEADER
*StartAddr
,
345 IN UINT8 Flags
= EFI_IFR_QUESTION_FLAG_DEFAULT
346 ) : CIfrStatementHeader (QH2SH(StartAddr
)) {
348 mHeader
->QuestionId
= EFI_QUESTION_ID_INVALID
;
349 mHeader
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
350 mHeader
->VarStoreInfo
.VarName
= EFI_STRING_ID_INVALID
;
351 mHeader
->VarStoreInfo
.VarOffset
= EFI_VAROFFSET_INVALID
;
352 mHeader
->Flags
= Flags
;
355 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
356 mHeader
->QuestionId
= QuestionId
;
359 VOID
SetVarStoreInfo (IN EFI_VARSTORE_INFO
*Info
) {
360 mHeader
->VarStoreId
= Info
->mVarStoreId
;
361 mHeader
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
362 mHeader
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
365 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 Flags
) {
366 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_READ_ONLY
)) {
367 mHeader
->Flags
|= EFI_IFR_FLAG_READ_ONLY
;
370 _FLAG_CLEAR (Flags
, 0x02);
372 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_CALLBACK
)) {
373 mHeader
->Flags
|= EFI_IFR_FLAG_CALLBACK
;
377 // ignore NVAccessFlag
379 _FLAG_CLEAR (Flags
, 0x08);
381 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RESET_REQUIRED
)) {
382 mHeader
->Flags
|= EFI_IFR_FLAG_RESET_REQUIRED
;
386 // Set LateCheck Flag to compatible for framework flag
387 // but it uses 0x20 as its flag, if in the future UEFI may take this flag
389 if (_FLAG_TEST_AND_CLEAR (Flags
, 0x20)) {
390 mHeader
->Flags
|= 0x20;
393 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_OPTIONS_ONLY
)) {
394 mHeader
->Flags
|= EFI_IFR_FLAG_OPTIONS_ONLY
;
397 return _FLAGS_ZERO (Flags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
402 * The definition of CIfrMinMaxStepData
404 class CIfrMinMaxStepData
{
406 MINMAXSTEP_DATA
*mMinMaxStepData
;
411 CIfrMinMaxStepData (MINMAXSTEP_DATA
*DataAddr
, BOOLEAN NumericOpcode
=FALSE
) : mMinMaxStepData (DataAddr
) {
412 mMinMaxStepData
->u64
.MinValue
= 0;
413 mMinMaxStepData
->u64
.MaxValue
= 0;
414 mMinMaxStepData
->u64
.Step
= 0;
416 IsNumeric
= NumericOpcode
;
419 VOID
SetMinMaxStepData (IN UINT64 MinValue
, IN UINT64 MaxValue
, IN UINT64 Step
) {
421 mMinMaxStepData
->u64
.MinValue
= MinValue
;
422 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
425 if (MinValue
< mMinMaxStepData
->u64
.MinValue
) {
426 mMinMaxStepData
->u64
.MinValue
= MinValue
;
428 if (MaxValue
> mMinMaxStepData
->u64
.MaxValue
) {
429 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
432 mMinMaxStepData
->u64
.Step
= Step
;
435 VOID
SetMinMaxStepData (IN UINT32 MinValue
, IN UINT32 MaxValue
, IN UINT32 Step
) {
437 mMinMaxStepData
->u32
.MinValue
= MinValue
;
438 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
441 if (MinValue
< mMinMaxStepData
->u32
.MinValue
) {
442 mMinMaxStepData
->u32
.MinValue
= MinValue
;
444 if (MaxValue
> mMinMaxStepData
->u32
.MaxValue
) {
445 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
448 mMinMaxStepData
->u32
.Step
= Step
;
451 VOID
SetMinMaxStepData (IN UINT16 MinValue
, IN UINT16 MaxValue
, IN UINT16 Step
) {
453 mMinMaxStepData
->u16
.MinValue
= MinValue
;
454 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
457 if (MinValue
< mMinMaxStepData
->u16
.MinValue
) {
458 mMinMaxStepData
->u16
.MinValue
= MinValue
;
460 if (MaxValue
> mMinMaxStepData
->u16
.MaxValue
) {
461 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
464 mMinMaxStepData
->u16
.Step
= Step
;
467 VOID
SetMinMaxStepData (IN UINT8 MinValue
, IN UINT8 MaxValue
, IN UINT8 Step
) {
469 mMinMaxStepData
->u8
.MinValue
= MinValue
;
470 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
473 if (MinValue
< mMinMaxStepData
->u8
.MinValue
) {
474 mMinMaxStepData
->u8
.MinValue
= MinValue
;
476 if (MaxValue
> mMinMaxStepData
->u8
.MaxValue
) {
477 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
480 mMinMaxStepData
->u8
.Step
= Step
;
483 UINT64
GetMinData (UINT8 VarType
) {
486 case EFI_IFR_TYPE_NUM_SIZE_64
:
487 MinValue
= mMinMaxStepData
->u64
.MinValue
;
489 case EFI_IFR_TYPE_NUM_SIZE_32
:
490 MinValue
= (UINT64
) mMinMaxStepData
->u32
.MinValue
;
492 case EFI_IFR_TYPE_NUM_SIZE_16
:
493 MinValue
= (UINT64
) mMinMaxStepData
->u16
.MinValue
;
495 case EFI_IFR_TYPE_NUM_SIZE_8
:
496 MinValue
= (UINT64
) mMinMaxStepData
->u8
.MinValue
;
504 UINT64
GetMaxData (UINT8 VarType
) {
507 case EFI_IFR_TYPE_NUM_SIZE_64
:
508 MaxValue
= mMinMaxStepData
->u64
.MaxValue
;
510 case EFI_IFR_TYPE_NUM_SIZE_32
:
511 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.MaxValue
;
513 case EFI_IFR_TYPE_NUM_SIZE_16
:
514 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.MaxValue
;
516 case EFI_IFR_TYPE_NUM_SIZE_8
:
517 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.MaxValue
;
525 UINT64
GetStepData (UINT8 VarType
) {
528 case EFI_IFR_TYPE_NUM_SIZE_64
:
529 MaxValue
= mMinMaxStepData
->u64
.Step
;
531 case EFI_IFR_TYPE_NUM_SIZE_32
:
532 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.Step
;
534 case EFI_IFR_TYPE_NUM_SIZE_16
:
535 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.Step
;
537 case EFI_IFR_TYPE_NUM_SIZE_8
:
538 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.Step
;
546 BOOLEAN
IsNumericOpcode () {
551 static CIfrQuestionHeader
*gCurrentQuestion
= NULL
;
552 static CIfrMinMaxStepData
*gCurrentMinMaxData
= NULL
;
555 * The definition of all of the UEFI IFR Objects
557 class CIfrFormSet
: public CIfrObj
, public CIfrOpHeader
{
559 EFI_IFR_FORM_SET
*mFormSet
;
560 EFI_GUID
*mClassGuid
;
563 CIfrFormSet (UINT8 Size
) : CIfrObj (EFI_IFR_FORM_SET_OP
, (CHAR8
**)&mFormSet
, Size
),
564 CIfrOpHeader (EFI_IFR_FORM_SET_OP
, &mFormSet
->Header
, Size
) {
565 mFormSet
->Help
= EFI_STRING_ID_INVALID
;
566 mFormSet
->FormSetTitle
= EFI_STRING_ID_INVALID
;
568 memset (&mFormSet
->Guid
, 0, sizeof (EFI_GUID
));
569 mClassGuid
= (EFI_GUID
*) (mFormSet
+ 1);
572 VOID
SetGuid (IN EFI_GUID
*Guid
) {
573 memcpy (&mFormSet
->Guid
, Guid
, sizeof (EFI_GUID
));
576 VOID
SetFormSetTitle (IN EFI_STRING_ID FormSetTitle
) {
577 mFormSet
->FormSetTitle
= FormSetTitle
;
580 VOID
SetHelp (IN EFI_STRING_ID Help
) {
581 mFormSet
->Help
= Help
;
584 VOID
SetClassGuid (IN EFI_GUID
*Guid
) {
585 memcpy (&(mClassGuid
[mFormSet
->Flags
++]), Guid
, sizeof (EFI_GUID
));
589 return mFormSet
->Flags
;
593 class CIfrEnd
: public CIfrObj
, public CIfrOpHeader
{
598 CIfrEnd () : CIfrObj (EFI_IFR_END_OP
, (CHAR8
**)&mEnd
),
599 CIfrOpHeader (EFI_IFR_END_OP
, &mEnd
->Header
) {}
602 class CIfrDefaultStore
: public CIfrObj
, public CIfrOpHeader
{
604 EFI_IFR_DEFAULTSTORE
*mDefaultStore
;
607 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP
, (CHAR8
**)&mDefaultStore
),
608 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP
, &mDefaultStore
->Header
) {
609 mDefaultStore
->DefaultId
= EFI_VARSTORE_ID_INVALID
;
610 mDefaultStore
->DefaultName
= EFI_STRING_ID_INVALID
;
613 VOID
SetDefaultName (IN EFI_STRING_ID DefaultName
) {
614 mDefaultStore
->DefaultName
= DefaultName
;
617 VOID
SetDefaultId (IN UINT16 DefaultId
) {
618 mDefaultStore
->DefaultId
= DefaultId
;
622 #define EFI_FORM_ID_MAX 0xFFFF
623 #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
627 STATIC UINT32 FormIdBitMap
[EFI_FREE_FORM_ID_BITMAP_SIZE
];
629 STATIC BOOLEAN
ChekFormIdFree (IN EFI_FORM_ID FormId
) {
630 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
631 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
633 return (FormIdBitMap
[Index
] & (0x80000000 >> Offset
)) == 0;
636 STATIC VOID
MarkFormIdUsed (IN EFI_FORM_ID FormId
) {
637 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
638 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
640 FormIdBitMap
[Index
] |= (0x80000000 >> Offset
);
644 class CIfrForm
: public CIfrObj
, public CIfrOpHeader
{
649 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP
, (CHAR8
**)&mForm
),
650 CIfrOpHeader (EFI_IFR_FORM_OP
, &mForm
->Header
) {
652 mForm
->FormTitle
= EFI_STRING_ID_INVALID
;
655 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
658 // FormId can't be 0.
660 return VFR_RETURN_INVALID_PARAMETER
;
662 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
663 return VFR_RETURN_FORMID_REDEFINED
;
665 mForm
->FormId
= FormId
;
666 CIfrFormId::MarkFormIdUsed (FormId
);
667 return VFR_RETURN_SUCCESS
;
670 VOID
SetFormTitle (IN EFI_STRING_ID FormTitle
) {
671 mForm
->FormTitle
= FormTitle
;
675 class CIfrFormMap
: public CIfrObj
, public CIfrOpHeader
{
677 EFI_IFR_FORM_MAP
*mFormMap
;
678 EFI_IFR_FORM_MAP_METHOD
*mMethodMap
;
681 CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP
, (CHAR8
**)&mFormMap
, sizeof (EFI_IFR_FORM_MAP
), TRUE
),
682 CIfrOpHeader (EFI_IFR_FORM_MAP_OP
, &mFormMap
->Header
) {
683 mFormMap
->FormId
= 0;
684 mMethodMap
= (EFI_IFR_FORM_MAP_METHOD
*) (mFormMap
+ 1);
687 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
690 // FormId can't be 0.
692 return VFR_RETURN_INVALID_PARAMETER
;
694 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
695 return VFR_RETURN_FORMID_REDEFINED
;
697 mFormMap
->FormId
= FormId
;
698 CIfrFormId::MarkFormIdUsed (FormId
);
699 return VFR_RETURN_SUCCESS
;
702 VOID
SetFormMapMethod (IN EFI_STRING_ID MethodTitle
, IN EFI_GUID
*MethodGuid
) {
703 if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD
))) {
704 IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD
));
706 mMethodMap
->MethodTitle
= MethodTitle
;
707 memcpy (&(mMethodMap
->MethodIdentifier
), MethodGuid
, sizeof (EFI_GUID
));
713 class CIfrVarStore
: public CIfrObj
, public CIfrOpHeader
{
715 EFI_IFR_VARSTORE
*mVarStore
;
718 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP
, (CHAR8
**)&mVarStore
, sizeof (EFI_IFR_VARSTORE
), TRUE
),
719 CIfrOpHeader (EFI_IFR_VARSTORE_OP
, &mVarStore
->Header
) {
720 mVarStore
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
722 memset (&mVarStore
->Guid
, 0, sizeof (EFI_GUID
));
723 mVarStore
->Name
[0] = '\0';
726 VOID
SetGuid (IN EFI_GUID
*Guid
) {
727 memcpy (&mVarStore
->Guid
, Guid
, sizeof (EFI_GUID
));
730 VOID
SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId
) {
731 mVarStore
->VarStoreId
= VarStoreId
;
734 VOID
SetSize (IN UINT16 Size
) {
735 mVarStore
->Size
= Size
;
738 VOID
SetName (IN CHAR8
*Name
) {
742 Len
= (UINT8
) strlen (Name
);
744 if (ExpendObjBin (Len
) == TRUE
) {
746 strcpy ((CHAR8
*)(mVarStore
->Name
), Name
);
753 class CIfrVarStoreEfi
: public CIfrObj
, public CIfrOpHeader
{
755 EFI_IFR_VARSTORE_EFI
*mVarStoreEfi
;
758 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP
, (CHAR8
**)&mVarStoreEfi
),
759 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP
, &mVarStoreEfi
->Header
) {
760 mVarStoreEfi
->VarStoreId
= EFI_VAROFFSET_INVALID
;
761 memset (&mVarStoreEfi
->Guid
, 0, sizeof (EFI_GUID
));
764 VOID
SetGuid (IN EFI_GUID
*Guid
) {
765 memcpy (&mVarStoreEfi
->Guid
, Guid
, sizeof (EFI_GUID
));
768 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
769 mVarStoreEfi
->VarStoreId
= VarStoreId
;
772 VOID
SetAttributes (IN UINT32 Attributes
) {
773 mVarStoreEfi
->Attributes
= Attributes
;
777 class CIfrVarStoreNameValue
: public CIfrObj
, public CIfrOpHeader
{
779 EFI_IFR_VARSTORE_NAME_VALUE
*mVarStoreNameValue
;
782 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP
, (CHAR8
**)&mVarStoreNameValue
),
783 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP
, &mVarStoreNameValue
->Header
) {
784 mVarStoreNameValue
->VarStoreId
= EFI_VAROFFSET_INVALID
;
785 memset (&mVarStoreNameValue
->Guid
, 0, sizeof (EFI_GUID
));
788 VOID
SetGuid (IN EFI_GUID
*Guid
) {
789 memcpy (&mVarStoreNameValue
->Guid
, Guid
, sizeof (EFI_GUID
));
792 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
793 mVarStoreNameValue
->VarStoreId
= VarStoreId
;
797 class CIfrImage
: public CIfrObj
, public CIfrOpHeader
{
799 EFI_IFR_IMAGE
*mImage
;
802 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP
, (CHAR8
**)&mImage
),
803 CIfrOpHeader (EFI_IFR_FORM_OP
, &mImage
->Header
) {
804 mImage
->Id
= EFI_IMAGE_ID_INVALID
;
807 VOID
SetImageId (IN EFI_IMAGE_ID ImageId
) {
808 mImage
->Id
= ImageId
;
812 class CIfrModal
: public CIfrObj
, public CIfrOpHeader
{
814 EFI_IFR_MODAL
*mModal
;
817 CIfrModal () : CIfrObj (EFI_IFR_MODAL_TAG_OP
, (CHAR8
**)&mModal
),
818 CIfrOpHeader (EFI_IFR_MODAL_TAG_OP
, &mModal
->Header
) {
822 class CIfrLocked
: public CIfrObj
, public CIfrOpHeader
{
824 EFI_IFR_LOCKED
*mLocked
;
827 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP
, (CHAR8
**)&mLocked
),
828 CIfrOpHeader (EFI_IFR_LOCKED_OP
, &mLocked
->Header
) {}
831 class CIfrRule
: public CIfrObj
, public CIfrOpHeader
{
836 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP
, (CHAR8
**)&mRule
),
837 mRule ((EFI_IFR_RULE
*)GetObjBinAddr()),
838 CIfrOpHeader (EFI_IFR_RULE_OP
, &mRule
->Header
) {
839 mRule
->RuleId
= EFI_RULE_ID_INVALID
;
842 VOID
SetRuleId (IN UINT8 RuleId
) {
843 mRule
->RuleId
= RuleId
;
847 static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue
= {0, };
849 class CIfrDefault
: public CIfrObj
, public CIfrOpHeader
{
851 EFI_IFR_DEFAULT
*mDefault
;
855 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
856 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
,
857 IN EFI_IFR_TYPE_VALUE Value
= gZeroEfiIfrTypeValue
858 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
),
859 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
) {
860 mDefault
->Type
= Type
;
861 mDefault
->Value
= Value
;
862 mDefault
->DefaultId
= DefaultId
;
865 VOID
SetDefaultId (IN UINT16 DefaultId
) {
866 mDefault
->DefaultId
= DefaultId
;
869 VOID
SetType (IN UINT8 Type
) {
870 mDefault
->Type
= Type
;
873 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
874 mDefault
->Value
= Value
;
878 class CIfrValue
: public CIfrObj
, public CIfrOpHeader
{
880 EFI_IFR_VALUE
*mValue
;
883 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP
, (CHAR8
**)&mValue
),
884 CIfrOpHeader (EFI_IFR_VALUE_OP
, &mValue
->Header
) {}
888 class CIfrRead
: public CIfrObj
, public CIfrOpHeader
{
893 CIfrRead () : CIfrObj (EFI_IFR_READ_OP
, (CHAR8
**)&mRead
),
894 CIfrOpHeader (EFI_IFR_READ_OP
, &mRead
->Header
) {}
898 class CIfrWrite
: public CIfrObj
, public CIfrOpHeader
{
900 EFI_IFR_WRITE
*mWrite
;
903 CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP
, (CHAR8
**)&mWrite
),
904 CIfrOpHeader (EFI_IFR_WRITE_OP
, &mWrite
->Header
) {}
908 class CIfrGet
: public CIfrObj
, public CIfrOpHeader
{
915 ) : CIfrObj (EFI_IFR_GET_OP
, (CHAR8
**)&mGet
),
916 CIfrOpHeader (EFI_IFR_GET_OP
, &mGet
->Header
) {
920 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
921 mGet
->VarStoreId
= Info
->mVarStoreId
;
922 mGet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
923 mGet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
924 mGet
->VarStoreType
= Info
->mVarType
;
928 class CIfrSet
: public CIfrObj
, public CIfrOpHeader
{
935 ) : CIfrObj (EFI_IFR_SET_OP
, (CHAR8
**)&mSet
),
936 CIfrOpHeader (EFI_IFR_SET_OP
, &mSet
->Header
) {
940 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
941 mSet
->VarStoreId
= Info
->mVarStoreId
;
942 mSet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
943 mSet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
944 mSet
->VarStoreType
= Info
->mVarType
;
948 class CIfrSubtitle
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
950 EFI_IFR_SUBTITLE
*mSubtitle
;
953 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP
, (CHAR8
**)&mSubtitle
),
954 CIfrOpHeader (EFI_IFR_SUBTITLE_OP
, &mSubtitle
->Header
),
955 CIfrStatementHeader (&mSubtitle
->Statement
) {
956 mSubtitle
->Flags
= 0;
959 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
960 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_HORIZONTAL
)) {
961 mSubtitle
->Flags
|= EFI_IFR_FLAGS_HORIZONTAL
;
964 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
968 class CIfrText
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
973 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP
, (CHAR8
**)&mText
),
974 CIfrOpHeader (EFI_IFR_TEXT_OP
, &mText
->Header
),
975 CIfrStatementHeader (&mText
->Statement
) {
976 mText
->TextTwo
= EFI_STRING_ID_INVALID
;
979 VOID
SetTextTwo (IN EFI_STRING_ID StringId
) {
980 mText
->TextTwo
= StringId
;
984 class CIfrRef
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
989 CIfrRef () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef
),
990 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef
->Header
),
991 CIfrQuestionHeader (&mRef
->Question
) {
995 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
996 mRef
->FormId
= FormId
;
1000 class CIfrRef2
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1002 EFI_IFR_REF2
*mRef2
;
1005 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef2
, sizeof (EFI_IFR_REF2
)),
1006 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef2
->Header
, sizeof (EFI_IFR_REF2
)),
1007 CIfrQuestionHeader (&mRef2
->Question
) {
1009 mRef2
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1012 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1013 mRef2
->FormId
= FormId
;
1016 EFI_VFR_RETURN_CODE
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1017 if (QuestionId
== EFI_QUESTION_ID_INVALID
) {
1018 return VFR_RETURN_UNDEFINED
;
1020 mRef2
->QuestionId
= QuestionId
;
1021 return VFR_RETURN_SUCCESS
;
1025 class CIfrRef3
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1027 EFI_IFR_REF3
*mRef3
;
1030 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef3
, sizeof(EFI_IFR_REF3
)),
1031 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef3
->Header
, sizeof (EFI_IFR_REF3
)),
1032 CIfrQuestionHeader (&mRef3
->Question
) {
1034 mRef3
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1035 memset (&mRef3
->FormSetId
, 0, sizeof (EFI_GUID
));
1038 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1039 mRef3
->FormId
= FormId
;
1042 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1043 mRef3
->QuestionId
= QuestionId
;
1046 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1047 mRef3
->FormSetId
= FormSetId
;
1051 class CIfrRef4
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1053 EFI_IFR_REF4
*mRef4
;
1056 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef4
, sizeof(EFI_IFR_REF3
)),
1057 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef4
->Header
, sizeof (EFI_IFR_REF3
)),
1058 CIfrQuestionHeader (&mRef4
->Question
) {
1060 mRef4
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1061 memset (&mRef4
->FormSetId
, 0, sizeof (EFI_GUID
));
1062 mRef4
->DevicePath
= EFI_STRING_ID_INVALID
;
1065 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1066 mRef4
->FormId
= FormId
;
1069 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1070 mRef4
->QuestionId
= QuestionId
;
1073 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1074 mRef4
->FormSetId
= FormSetId
;
1077 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1078 mRef4
->DevicePath
= DevicePath
;
1082 class CIfrResetButton
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1084 EFI_IFR_RESET_BUTTON
*mResetButton
;
1087 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP
, (CHAR8
**)&mResetButton
),
1088 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP
, &mResetButton
->Header
),
1089 CIfrStatementHeader (&mResetButton
->Statement
) {
1090 mResetButton
->DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
1093 VOID
SetDefaultId (IN UINT16 DefaultId
) {
1094 mResetButton
->DefaultId
= DefaultId
;
1098 class CIfrCheckBox
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1100 EFI_IFR_CHECKBOX
*mCheckBox
;
1103 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP
, (CHAR8
**)&mCheckBox
),
1104 CIfrOpHeader (EFI_IFR_CHECKBOX_OP
, &mCheckBox
->Header
),
1105 CIfrQuestionHeader (&mCheckBox
->Question
) {
1106 mCheckBox
->Flags
= 0;
1107 gCurrentQuestion
= this;
1111 gCurrentQuestion
= NULL
;
1114 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, UINT8 LFlags
) {
1115 EFI_VFR_RETURN_CODE Ret
;
1117 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1118 if (Ret
!= VFR_RETURN_SUCCESS
) {
1122 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT
)) {
1123 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT
;
1126 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT_MFG
)) {
1127 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT_MFG
;
1130 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1133 UINT8
GetFlags (VOID
) {
1134 return mCheckBox
->Flags
;
1138 class CIfrAction
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1140 EFI_IFR_ACTION
*mAction
;
1143 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP
, (CHAR8
**)&mAction
),
1144 CIfrOpHeader (EFI_IFR_ACTION_OP
, &mAction
->Header
),
1145 CIfrQuestionHeader (&mAction
->Question
) {
1146 mAction
->QuestionConfig
= EFI_STRING_ID_INVALID
;
1149 VOID
SetQuestionConfig (IN EFI_STRING_ID QuestionConfig
) {
1150 mAction
->QuestionConfig
= QuestionConfig
;
1154 class CIfrDate
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1156 EFI_IFR_DATE
*mDate
;
1159 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP
, (CHAR8
**)&mDate
),
1160 CIfrOpHeader (EFI_IFR_DATE_OP
, &mDate
->Header
),
1161 CIfrQuestionHeader (&mDate
->Question
) {
1165 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1166 EFI_VFR_RETURN_CODE Ret
;
1168 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1169 if (Ret
!= VFR_RETURN_SUCCESS
) {
1173 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_YEAR_SUPPRESS
)) {
1174 mDate
->Flags
|= EFI_QF_DATE_YEAR_SUPPRESS
;
1177 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_MONTH_SUPPRESS
)) {
1178 mDate
->Flags
|= EFI_QF_DATE_MONTH_SUPPRESS
;
1181 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_DAY_SUPPRESS
)) {
1182 mDate
->Flags
|= EFI_QF_DATE_DAY_SUPPRESS
;
1185 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_NORMAL
)) {
1186 mDate
->Flags
|= QF_DATE_STORAGE_NORMAL
;
1187 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_TIME
)) {
1188 mDate
->Flags
|= QF_DATE_STORAGE_TIME
;
1189 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_WAKEUP
)) {
1190 mDate
->Flags
|= QF_DATE_STORAGE_WAKEUP
;
1193 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1197 class CIfrNumeric
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1199 EFI_IFR_NUMERIC
*mNumeric
;
1202 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP
, (CHAR8
**)&mNumeric
),
1203 CIfrOpHeader (EFI_IFR_NUMERIC_OP
, &mNumeric
->Header
),
1204 CIfrQuestionHeader (&mNumeric
->Question
),
1205 CIfrMinMaxStepData (&mNumeric
->data
, TRUE
) {
1206 mNumeric
->Flags
= EFI_IFR_NUMERIC_SIZE_1
| EFI_IFR_DISPLAY_UINT_DEC
;
1207 gCurrentQuestion
= this;
1208 gCurrentMinMaxData
= this;
1212 gCurrentQuestion
= NULL
;
1213 gCurrentMinMaxData
= NULL
;
1216 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1217 EFI_VFR_RETURN_CODE Ret
;
1219 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1220 if (Ret
!= VFR_RETURN_SUCCESS
) {
1224 if (LFlags
& EFI_IFR_DISPLAY
) {
1225 mNumeric
->Flags
= LFlags
;
1227 mNumeric
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1229 return VFR_RETURN_SUCCESS
;
1233 class CIfrOneOf
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1235 EFI_IFR_ONE_OF
*mOneOf
;
1238 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP
, (CHAR8
**)&mOneOf
),
1239 CIfrOpHeader (EFI_IFR_ONE_OF_OP
, &mOneOf
->Header
),
1240 CIfrQuestionHeader (&mOneOf
->Question
),
1241 CIfrMinMaxStepData (&mOneOf
->data
) {
1243 gCurrentQuestion
= this;
1244 gCurrentMinMaxData
= this;
1248 gCurrentQuestion
= NULL
;
1249 gCurrentMinMaxData
= NULL
;
1252 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1253 EFI_VFR_RETURN_CODE Ret
;
1255 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1256 if (Ret
!= VFR_RETURN_SUCCESS
) {
1260 if (LFlags
& EFI_IFR_DISPLAY
) {
1261 mOneOf
->Flags
= LFlags
;
1263 mOneOf
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1265 return VFR_RETURN_SUCCESS
;
1269 class CIfrString
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1271 EFI_IFR_STRING
*mString
;
1274 CIfrString () : CIfrObj (EFI_IFR_STRING_OP
, (CHAR8
**)&mString
),
1275 CIfrOpHeader (EFI_IFR_STRING_OP
, &mString
->Header
),
1276 CIfrQuestionHeader (&mString
->Question
) {
1278 mString
->MinSize
= 0;
1279 mString
->MaxSize
= 0;
1280 gCurrentQuestion
= this;
1284 gCurrentQuestion
= NULL
;
1287 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1288 EFI_VFR_RETURN_CODE Ret
;
1290 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1291 if (Ret
!= VFR_RETURN_SUCCESS
) {
1295 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_STRING_MULTI_LINE
)) {
1296 mString
->Flags
|= EFI_IFR_STRING_MULTI_LINE
;
1299 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1302 VOID
SetMinSize (IN UINT8 Flags
) {
1303 mString
->MinSize
= Flags
;
1306 VOID
SetMaxSize (IN UINT8 MaxSize
) {
1307 mString
->MaxSize
= MaxSize
;
1311 class CIfrPassword
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1313 EFI_IFR_PASSWORD
*mPassword
;
1316 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP
, (CHAR8
**)&mPassword
),
1317 CIfrOpHeader (EFI_IFR_PASSWORD_OP
, &mPassword
->Header
),
1318 CIfrQuestionHeader (&mPassword
->Question
) {
1319 mPassword
->MinSize
= 0;
1320 mPassword
->MaxSize
= 0;
1321 gCurrentQuestion
= this;
1325 gCurrentQuestion
= NULL
;
1328 VOID
SetMinSize (IN UINT16 MinSize
) {
1329 mPassword
->MinSize
= MinSize
;
1332 VOID
SetMaxSize (IN UINT16 MaxSize
) {
1333 mPassword
->MaxSize
= MaxSize
;
1337 class CIfrOrderedList
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1339 EFI_IFR_ORDERED_LIST
*mOrderedList
;
1342 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP
, (CHAR8
**)&mOrderedList
),
1343 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP
, &mOrderedList
->Header
),
1344 CIfrQuestionHeader (&mOrderedList
->Question
) {
1345 mOrderedList
->MaxContainers
= 0;
1346 mOrderedList
->Flags
= 0;
1347 gCurrentQuestion
= this;
1350 ~CIfrOrderedList () {
1351 gCurrentQuestion
= NULL
;
1354 VOID
SetMaxContainers (IN UINT8 MaxContainers
) {
1355 mOrderedList
->MaxContainers
= MaxContainers
;
1358 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1359 EFI_VFR_RETURN_CODE Ret
;
1361 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1362 if (Ret
!= VFR_RETURN_SUCCESS
) {
1366 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_UNIQUE_SET
)) {
1367 mOrderedList
->Flags
|= EFI_IFR_UNIQUE_SET
;
1370 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_NO_EMPTY_SET
)) {
1371 mOrderedList
->Flags
|= EFI_IFR_NO_EMPTY_SET
;
1374 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1378 class CIfrTime
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1380 EFI_IFR_TIME
*mTime
;
1383 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP
, (CHAR8
**)&mTime
),
1384 CIfrOpHeader (EFI_IFR_TIME_OP
, &mTime
->Header
),
1385 CIfrQuestionHeader (&mTime
->Question
) {
1389 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1390 EFI_VFR_RETURN_CODE Ret
;
1392 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1393 if (Ret
!= VFR_RETURN_SUCCESS
) {
1397 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_HOUR_SUPPRESS
)) {
1398 mTime
->Flags
|= QF_TIME_HOUR_SUPPRESS
;
1401 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_MINUTE_SUPPRESS
)) {
1402 mTime
->Flags
|= QF_TIME_MINUTE_SUPPRESS
;
1405 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_SECOND_SUPPRESS
)) {
1406 mTime
->Flags
|= QF_TIME_SECOND_SUPPRESS
;
1409 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_NORMAL
)) {
1410 mTime
->Flags
|= QF_TIME_STORAGE_NORMAL
;
1411 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_TIME
)) {
1412 mTime
->Flags
|= QF_TIME_STORAGE_TIME
;
1413 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_WAKEUP
)) {
1414 mTime
->Flags
|= QF_TIME_STORAGE_WAKEUP
;
1417 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1421 class CIfrDisableIf
: public CIfrObj
, public CIfrOpHeader
{
1423 EFI_IFR_DISABLE_IF
*mDisableIf
;
1426 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP
, (CHAR8
**)&mDisableIf
),
1427 mDisableIf ((EFI_IFR_DISABLE_IF
*) GetObjBinAddr()),
1428 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP
, &mDisableIf
->Header
) {}
1431 class CIfrSuppressIf
: public CIfrObj
, public CIfrOpHeader
{
1433 EFI_IFR_SUPPRESS_IF
*mSuppressIf
;
1436 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP
, (CHAR8
**)&mSuppressIf
),
1437 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP
, &mSuppressIf
->Header
) {}
1440 class CIfrGrayOutIf
: public CIfrObj
, public CIfrOpHeader
{
1442 EFI_IFR_GRAY_OUT_IF
*mGrayOutIf
;
1445 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP
, (CHAR8
**)&mGrayOutIf
),
1446 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP
, &mGrayOutIf
->Header
) {}
1449 class CIfrInconsistentIf
: public CIfrObj
, public CIfrOpHeader
{
1451 EFI_IFR_INCONSISTENT_IF
*mInconsistentIf
;
1454 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP
, (CHAR8
**)&mInconsistentIf
),
1455 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP
, &mInconsistentIf
->Header
) {
1456 mInconsistentIf
->Error
= EFI_STRING_ID_INVALID
;
1459 VOID
SetError (IN EFI_STRING_ID Error
) {
1460 mInconsistentIf
->Error
= Error
;
1464 class CIfrNoSubmitIf
: public CIfrObj
, public CIfrOpHeader
{
1466 EFI_IFR_NO_SUBMIT_IF
*mNoSubmitIf
;
1469 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP
, (CHAR8
**)&mNoSubmitIf
),
1470 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP
, &mNoSubmitIf
->Header
) {
1471 mNoSubmitIf
->Error
= EFI_STRING_ID_INVALID
;
1474 VOID
SetError (IN EFI_STRING_ID Error
) {
1475 mNoSubmitIf
->Error
= Error
;
1479 class CIfrRefresh
: public CIfrObj
, public CIfrOpHeader
{
1481 EFI_IFR_REFRESH
*mRefresh
;
1484 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP
, (CHAR8
**)&mRefresh
),
1485 CIfrOpHeader (EFI_IFR_REFRESH_OP
, &mRefresh
->Header
) {
1486 mRefresh
->RefreshInterval
= 0;
1489 VOID
SetRefreshInterval (IN UINT8 RefreshInterval
) {
1490 mRefresh
->RefreshInterval
= RefreshInterval
;
1494 class CIfrVarStoreDevice
: public CIfrObj
, public CIfrOpHeader
{
1496 EFI_IFR_VARSTORE_DEVICE
*mVarStoreDevice
;
1499 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP
, (CHAR8
**)&mVarStoreDevice
),
1500 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP
, &mVarStoreDevice
->Header
) {
1501 mVarStoreDevice
->DevicePath
= EFI_STRING_ID_INVALID
;
1504 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1505 mVarStoreDevice
->DevicePath
= DevicePath
;
1509 class CIfrOneOfOption
: public CIfrObj
, public CIfrOpHeader
{
1511 EFI_IFR_ONE_OF_OPTION
*mOneOfOption
;
1514 CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP
, (CHAR8
**)&mOneOfOption
),
1515 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP
, &mOneOfOption
->Header
) {
1516 mOneOfOption
->Flags
= 0;
1517 mOneOfOption
->Option
= EFI_STRING_ID_INVALID
;
1518 mOneOfOption
->Type
= EFI_IFR_TYPE_OTHER
;
1519 memset (&mOneOfOption
->Value
, 0, sizeof (mOneOfOption
->Value
));
1522 VOID
SetOption (IN EFI_STRING_ID Option
) {
1523 mOneOfOption
->Option
= Option
;
1526 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1527 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT
)) {
1528 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT
;
1531 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT_MFG
)) {
1532 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT_MFG
;
1535 if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
)) {
1536 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
);
1537 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_8
;
1538 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
)) {
1539 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
);
1540 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_16
;
1541 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
)) {
1542 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
);
1543 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_32
;
1544 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
)) {
1545 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
);
1546 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_64
;
1547 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_BOOLEAN
)) {
1548 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_BOOLEAN
);
1549 mOneOfOption
->Flags
|= EFI_IFR_TYPE_BOOLEAN
;
1550 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_TIME
)) {
1551 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_TIME
);
1552 mOneOfOption
->Flags
|= EFI_IFR_TYPE_TIME
;
1553 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_DATE
)) {
1554 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_DATE
);
1555 mOneOfOption
->Flags
|= EFI_IFR_TYPE_DATE
;
1556 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_STRING
)) {
1557 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_STRING
);
1558 mOneOfOption
->Flags
|= EFI_IFR_TYPE_STRING
;
1559 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_OTHER
)) {
1560 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_OTHER
);
1561 mOneOfOption
->Flags
|= EFI_IFR_TYPE_OTHER
;
1564 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1567 VOID
SetType (IN UINT8 Type
) {
1568 mOneOfOption
->Type
= Type
;
1571 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
1572 mOneOfOption
->Value
= Value
;
1575 UINT8
GetFlags (VOID
) {
1576 return mOneOfOption
->Flags
;
1580 static EFI_GUID IfrTianoGuid
= EFI_IFR_TIANO_GUID
;
1581 static EFI_GUID IfrFrameworkGuid
= EFI_IFR_FRAMEWORK_GUID
;
1583 class CIfrClass
: public CIfrObj
, public CIfrOpHeader
{
1585 EFI_IFR_GUID_CLASS
*mClass
;
1588 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mClass
, sizeof (EFI_IFR_GUID_CLASS
)),
1589 CIfrOpHeader (EFI_IFR_GUID_OP
, &mClass
->Header
, sizeof (EFI_IFR_GUID_CLASS
)) {
1590 mClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_CLASS
;
1591 mClass
->Guid
= IfrTianoGuid
;
1592 mClass
->Class
= EFI_NON_DEVICE_CLASS
;
1595 VOID
SetClass (IN UINT16 Class
) {
1596 mClass
->Class
= Class
;
1600 class CIfrSubClass
: public CIfrObj
, public CIfrOpHeader
{
1602 EFI_IFR_GUID_SUBCLASS
*mSubClass
;
1605 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mSubClass
, sizeof (EFI_IFR_GUID_SUBCLASS
)),
1606 CIfrOpHeader (EFI_IFR_GUID_OP
, &mSubClass
->Header
, sizeof (EFI_IFR_GUID_SUBCLASS
)) {
1607 mSubClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_SUBCLASS
;
1608 mSubClass
->Guid
= IfrTianoGuid
;
1609 mSubClass
->SubClass
= EFI_SETUP_APPLICATION_SUBCLASS
;
1612 VOID
SetSubClass (IN UINT16 SubClass
) {
1613 mSubClass
->SubClass
= SubClass
;
1617 class CIfrLabel
: public CIfrObj
, public CIfrOpHeader
{
1619 EFI_IFR_GUID_LABEL
*mLabel
;
1622 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mLabel
, sizeof (EFI_IFR_GUID_LABEL
)),
1623 CIfrOpHeader (EFI_IFR_GUID_OP
, &mLabel
->Header
, sizeof (EFI_IFR_GUID_LABEL
)) {
1624 mLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1625 mLabel
->Guid
= IfrTianoGuid
;
1628 VOID
SetNumber (IN UINT16 Number
) {
1629 mLabel
->Number
= Number
;
1633 class CIfrBanner
: public CIfrObj
, public CIfrOpHeader
{
1635 EFI_IFR_GUID_BANNER
*mBanner
;
1638 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mBanner
, sizeof (EFI_IFR_GUID_BANNER
)),
1639 CIfrOpHeader (EFI_IFR_GUID_OP
, &mBanner
->Header
, sizeof (EFI_IFR_GUID_BANNER
)) {
1640 mBanner
->ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
1641 mBanner
->Guid
= IfrTianoGuid
;
1644 VOID
SetTitle (IN EFI_STRING_ID StringId
) {
1645 mBanner
->Title
= StringId
;
1648 VOID
SetLine (IN UINT16 Line
) {
1649 mBanner
->LineNumber
= Line
;
1652 VOID
SetAlign (IN UINT8 Align
) {
1653 mBanner
->Alignment
= Align
;
1657 class CIfrOptionKey
: public CIfrObj
, public CIfrOpHeader
{
1659 EFI_IFR_GUID_OPTIONKEY
*mOptionKey
;
1663 IN EFI_QUESTION_ID QuestionId
,
1664 IN EFI_IFR_TYPE_VALUE
&OptionValue
,
1665 IN EFI_QUESTION_ID KeyValue
1666 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mOptionKey
, sizeof (EFI_IFR_GUID_OPTIONKEY
)),
1667 CIfrOpHeader (EFI_IFR_GUID_OP
, &mOptionKey
->Header
, sizeof (EFI_IFR_GUID_OPTIONKEY
)) {
1668 mOptionKey
->ExtendOpCode
= EFI_IFR_EXTEND_OP_OPTIONKEY
;
1669 mOptionKey
->Guid
= IfrFrameworkGuid
;
1670 mOptionKey
->QuestionId
= QuestionId
;
1671 mOptionKey
->OptionValue
= OptionValue
;
1672 mOptionKey
->KeyValue
= KeyValue
;
1676 class CIfrVarEqName
: public CIfrObj
, public CIfrOpHeader
{
1678 EFI_IFR_GUID_VAREQNAME
*mVarEqName
;
1682 IN EFI_QUESTION_ID QuestionId
,
1683 IN EFI_STRING_ID NameId
1684 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mVarEqName
, sizeof (EFI_IFR_GUID_VAREQNAME
)),
1685 CIfrOpHeader (EFI_IFR_GUID_OP
, &mVarEqName
->Header
, sizeof (EFI_IFR_GUID_VAREQNAME
)) {
1686 mVarEqName
->ExtendOpCode
= EFI_IFR_EXTEND_OP_VAREQNAME
;
1687 mVarEqName
->Guid
= IfrFrameworkGuid
;
1688 mVarEqName
->QuestionId
= QuestionId
;
1689 mVarEqName
->NameId
= NameId
;
1693 class CIfrTimeout
: public CIfrObj
, public CIfrOpHeader
{
1695 EFI_IFR_GUID_TIMEOUT
*mTimeout
;
1698 CIfrTimeout (IN UINT16 Timeout
= 0) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mTimeout
, sizeof (EFI_IFR_GUID_TIMEOUT
)),
1699 CIfrOpHeader (EFI_IFR_GUID_OP
, &mTimeout
->Header
, sizeof (EFI_IFR_GUID_TIMEOUT
)) {
1700 mTimeout
->ExtendOpCode
= EFI_IFR_EXTEND_OP_TIMEOUT
;
1701 mTimeout
->Guid
= IfrTianoGuid
;
1702 mTimeout
->TimeOut
= Timeout
;
1705 VOID
SetTimeout (IN UINT16 Timeout
) {
1706 mTimeout
->TimeOut
= Timeout
;
1710 class CIfrGuid
: public CIfrObj
, public CIfrOpHeader
{
1712 EFI_IFR_GUID
*mGuid
;
1715 CIfrGuid (UINT8 Size
) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mGuid
, sizeof (EFI_IFR_GUID
)+Size
),
1716 CIfrOpHeader (EFI_IFR_GUID_OP
, &mGuid
->Header
, sizeof (EFI_IFR_GUID
)+Size
) {
1717 memset (&mGuid
->Guid
, 0, sizeof (EFI_GUID
));
1720 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1721 memcpy (&mGuid
->Guid
, Guid
, sizeof (EFI_GUID
));
1724 VOID
SetData (IN UINT8
* DataBuff
, IN UINT8 Size
) {
1725 memcpy ((UINT8
*)mGuid
+ sizeof (EFI_IFR_GUID
), DataBuff
, Size
);
1729 class CIfrDup
: public CIfrObj
, public CIfrOpHeader
{
1736 ) : CIfrObj (EFI_IFR_DUP_OP
, (CHAR8
**)&mDup
),
1737 CIfrOpHeader (EFI_IFR_DUP_OP
, &mDup
->Header
) {
1742 class CIfrEqIdId
: public CIfrObj
, public CIfrOpHeader
{
1744 EFI_IFR_EQ_ID_ID
*mEqIdId
;
1749 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP
, (CHAR8
**)&mEqIdId
),
1750 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP
, &mEqIdId
->Header
) {
1752 mEqIdId
->QuestionId1
= EFI_QUESTION_ID_INVALID
;
1753 mEqIdId
->QuestionId2
= EFI_QUESTION_ID_INVALID
;
1756 VOID
SetQuestionId1 (
1757 IN EFI_QUESTION_ID QuestionId
,
1761 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1762 mEqIdId
->QuestionId1
= QuestionId
;
1764 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId1
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1768 VOID
SetQuestionId2 (
1769 IN EFI_QUESTION_ID QuestionId
,
1773 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1774 mEqIdId
->QuestionId2
= QuestionId
;
1776 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId2
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1781 class CIfrEqIdVal
: public CIfrObj
, public CIfrOpHeader
{
1783 EFI_IFR_EQ_ID_VAL
*mEqIdVal
;
1788 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP
, (CHAR8
**)&mEqIdVal
),
1789 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP
, &mEqIdVal
->Header
) {
1791 mEqIdVal
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1794 VOID
SetQuestionId (
1795 IN EFI_QUESTION_ID QuestionId
,
1799 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1800 mEqIdVal
->QuestionId
= QuestionId
;
1802 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVal
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1806 VOID
SetValue (IN UINT16 Value
) {
1807 mEqIdVal
->Value
= Value
;
1811 class CIfrEqIdList
: public CIfrObj
, public CIfrOpHeader
{
1813 EFI_IFR_EQ_ID_VAL_LIST
*mEqIdVList
;
1818 ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP
, (CHAR8
**)&mEqIdVList
, sizeof (EFI_IFR_EQ_ID_VAL_LIST
), TRUE
),
1819 CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP
, &mEqIdVList
->Header
) {
1821 mEqIdVList
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1822 mEqIdVList
->ListLength
= 0;
1823 mEqIdVList
->ValueList
[0] = 0;
1826 VOID
UpdateIfrBuffer (
1828 _EMIT_PENDING_OBJ();
1829 mEqIdVList
= (EFI_IFR_EQ_ID_VAL_LIST
*) GetObjBinAddr();
1830 UpdateHeader (&mEqIdVList
->Header
);
1833 VOID
SetQuestionId (
1834 IN EFI_QUESTION_ID QuestionId
,
1838 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1839 mEqIdVList
->QuestionId
= QuestionId
;
1841 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVList
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1845 VOID
SetListLength (IN UINT16 ListLength
) {
1846 mEqIdVList
->ListLength
= ListLength
;
1849 VOID
SetValueList (IN UINT16 Index
, IN UINT16 Value
) {
1851 mEqIdVList
->ValueList
[0] = Value
;
1855 if (ExpendObjBin (sizeof (UINT16
)) ==TRUE
) {
1856 IncLength (sizeof (UINT16
));
1857 mEqIdVList
->ValueList
[Index
] = Value
;
1862 class CIfrQuestionRef1
: public CIfrObj
, public CIfrOpHeader
{
1864 EFI_IFR_QUESTION_REF1
*mQuestionRef1
;
1869 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP
, (CHAR8
**)&mQuestionRef1
),
1870 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP
, &mQuestionRef1
->Header
) {
1872 mQuestionRef1
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1875 VOID
SetQuestionId (
1876 IN EFI_QUESTION_ID QuestionId
,
1880 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1881 mQuestionRef1
->QuestionId
= QuestionId
;
1883 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mQuestionRef1
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1888 class CIfrQuestionRef2
: public CIfrObj
, public CIfrOpHeader
{
1890 EFI_IFR_QUESTION_REF2
*mQuestionRef2
;
1895 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP
, (CHAR8
**)&mQuestionRef2
),
1896 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP
, &mQuestionRef2
->Header
) {
1901 class CIfrQuestionRef3
: public CIfrObj
, public CIfrOpHeader
{
1903 EFI_IFR_QUESTION_REF3
*mQuestionRef3
;
1908 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3
),
1909 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3
->Header
) {
1914 class CIfrQuestionRef3_2
: public CIfrObj
, public CIfrOpHeader
{
1916 EFI_IFR_QUESTION_REF3_2
*mQuestionRef3_2
;
1919 CIfrQuestionRef3_2 (
1921 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_2
, sizeof (EFI_IFR_QUESTION_REF3_2
)),
1922 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_2
->Header
, sizeof (EFI_IFR_QUESTION_REF3_2
)) {
1924 mQuestionRef3_2
->DevicePath
= EFI_STRING_ID_INVALID
;
1927 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1928 mQuestionRef3_2
->DevicePath
= DevicePath
;
1932 class CIfrQuestionRef3_3
: public CIfrObj
, public CIfrOpHeader
{
1934 EFI_IFR_QUESTION_REF3_3
*mQuestionRef3_3
;
1937 CIfrQuestionRef3_3 (
1939 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_3
, sizeof (EFI_IFR_QUESTION_REF3_3
)),
1940 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_3
->Header
, sizeof (EFI_IFR_QUESTION_REF3_3
)) {
1942 mQuestionRef3_3
->DevicePath
= EFI_STRING_ID_INVALID
;
1943 memset (&mQuestionRef3_3
->Guid
, 0, sizeof (EFI_GUID
));
1946 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1947 mQuestionRef3_3
->DevicePath
= DevicePath
;
1950 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1951 mQuestionRef3_3
->Guid
= *Guid
;
1955 class CIfrRuleRef
: public CIfrObj
, public CIfrOpHeader
{
1957 EFI_IFR_RULE_REF
*mRuleRef
;
1962 ) : CIfrObj (EFI_IFR_RULE_REF_OP
, (CHAR8
**)&mRuleRef
),
1963 CIfrOpHeader (EFI_IFR_RULE_REF_OP
, &mRuleRef
->Header
) {
1965 mRuleRef
->RuleId
= EFI_RULE_ID_INVALID
;
1968 VOID
SetRuleId (IN UINT8 RuleId
) {
1969 mRuleRef
->RuleId
= RuleId
;
1973 class CIfrStringRef1
: public CIfrObj
, public CIfrOpHeader
{
1975 EFI_IFR_STRING_REF1
*mStringRef1
;
1980 ) : CIfrObj (EFI_IFR_STRING_REF1_OP
, (CHAR8
**)&mStringRef1
),
1981 CIfrOpHeader (EFI_IFR_STRING_REF1_OP
, &mStringRef1
->Header
) {
1983 mStringRef1
->StringId
= EFI_STRING_ID_INVALID
;
1986 VOID
SetStringId (IN EFI_STRING_ID StringId
) {
1987 mStringRef1
->StringId
= StringId
;
1991 class CIfrStringRef2
: public CIfrObj
, public CIfrOpHeader
{
1993 EFI_IFR_STRING_REF2
*mStringRef2
;
1998 ) : CIfrObj (EFI_IFR_STRING_REF2_OP
, (CHAR8
**)&mStringRef2
),
1999 CIfrOpHeader (EFI_IFR_STRING_REF2_OP
, &mStringRef2
->Header
) {
2004 class CIfrThis
: public CIfrObj
, public CIfrOpHeader
{
2006 EFI_IFR_THIS
*mThis
;
2011 ) : CIfrObj (EFI_IFR_THIS_OP
, (CHAR8
**)&mThis
),
2012 CIfrOpHeader (EFI_IFR_THIS_OP
, &mThis
->Header
) {
2017 class CIfrSecurity
: public CIfrObj
, public CIfrOpHeader
{
2019 EFI_IFR_SECURITY
*mSecurity
;
2024 ) : CIfrObj (EFI_IFR_SECURITY_OP
, (CHAR8
**)&mSecurity
),
2025 CIfrOpHeader (EFI_IFR_SECURITY_OP
, &mSecurity
->Header
) {
2027 memset (&mSecurity
->Permissions
, 0, sizeof (EFI_GUID
));
2030 VOID
SetPermissions (IN EFI_GUID
*Permissions
) {
2031 memcpy (&mSecurity
->Permissions
, Permissions
, sizeof (EFI_GUID
));
2035 class CIfrUint8
: public CIfrObj
, public CIfrOpHeader
{
2037 EFI_IFR_UINT8
*mUint8
;
2042 ) : CIfrObj (EFI_IFR_UINT8_OP
, (CHAR8
**)&mUint8
),
2043 CIfrOpHeader (EFI_IFR_UINT8_OP
, &mUint8
->Header
) {
2047 VOID
SetValue (IN UINT8 Value
) {
2048 mUint8
->Value
= Value
;
2052 class CIfrUint16
: public CIfrObj
, public CIfrOpHeader
{
2054 EFI_IFR_UINT16
*mUint16
;
2059 ) : CIfrObj (EFI_IFR_UINT16_OP
, (CHAR8
**)&mUint16
),
2060 CIfrOpHeader (EFI_IFR_UINT16_OP
, &mUint16
->Header
) {
2064 VOID
SetValue (IN UINT16 Value
) {
2065 mUint16
->Value
= Value
;
2069 class CIfrUint32
: public CIfrObj
, public CIfrOpHeader
{
2071 EFI_IFR_UINT32
*mUint32
;
2076 ) : CIfrObj (EFI_IFR_UINT32_OP
, (CHAR8
**)&mUint32
),
2077 CIfrOpHeader (EFI_IFR_UINT32_OP
, &mUint32
->Header
) {
2081 VOID
SetValue (IN UINT32 Value
) {
2082 mUint32
->Value
= Value
;
2086 class CIfrUint64
: public CIfrObj
, public CIfrOpHeader
{
2088 EFI_IFR_UINT64
*mUint64
;
2093 ) : CIfrObj (EFI_IFR_UINT64_OP
, (CHAR8
**)&mUint64
),
2094 CIfrOpHeader (EFI_IFR_UINT64_OP
, &mUint64
->Header
) {
2098 VOID
SetValue (IN UINT64 Value
) {
2099 mUint64
->Value
= Value
;
2103 class CIfrTrue
: public CIfrObj
, public CIfrOpHeader
{
2105 EFI_IFR_TRUE
*mTrue
;
2110 ) : CIfrObj (EFI_IFR_TRUE_OP
, (CHAR8
**)&mTrue
),
2111 CIfrOpHeader (EFI_IFR_TRUE_OP
, &mTrue
->Header
) {
2116 class CIfrFalse
: public CIfrObj
, public CIfrOpHeader
{
2118 EFI_IFR_FALSE
*mFalse
;
2123 ) : CIfrObj (EFI_IFR_FALSE_OP
, (CHAR8
**)&mFalse
),
2124 CIfrOpHeader (EFI_IFR_FALSE_OP
, &mFalse
->Header
) {
2129 class CIfrOne
: public CIfrObj
, public CIfrOpHeader
{
2136 ) : CIfrObj (EFI_IFR_ONE_OP
, (CHAR8
**)&mOne
),
2137 CIfrOpHeader (EFI_IFR_ONE_OP
, &mOne
->Header
) {
2142 class CIfrOnes
: public CIfrObj
, public CIfrOpHeader
{
2144 EFI_IFR_ONES
*mOnes
;
2149 ) : CIfrObj (EFI_IFR_ONES_OP
, (CHAR8
**)&mOnes
),
2150 CIfrOpHeader (EFI_IFR_ONES_OP
, &mOnes
->Header
) {
2155 class CIfrZero
: public CIfrObj
, public CIfrOpHeader
{
2157 EFI_IFR_ZERO
*mZero
;
2162 ) : CIfrObj (EFI_IFR_ZERO_OP
, (CHAR8
**)&mZero
),
2163 CIfrOpHeader (EFI_IFR_ZERO_OP
, &mZero
->Header
) {
2168 class CIfrUndefined
: public CIfrObj
, public CIfrOpHeader
{
2170 EFI_IFR_UNDEFINED
*mUndefined
;
2175 ) : CIfrObj (EFI_IFR_UNDEFINED_OP
, (CHAR8
**)&mUndefined
),
2176 CIfrOpHeader (EFI_IFR_UNDEFINED_OP
, &mUndefined
->Header
) {
2181 class CIfrVersion
: public CIfrObj
, public CIfrOpHeader
{
2183 EFI_IFR_VERSION
*mVersion
;
2188 ) : CIfrObj (EFI_IFR_VERSION_OP
, (CHAR8
**)&mVersion
),
2189 CIfrOpHeader (EFI_IFR_VERSION_OP
, &mVersion
->Header
) {
2194 class CIfrLength
: public CIfrObj
, public CIfrOpHeader
{
2196 EFI_IFR_LENGTH
*mLength
;
2201 ) : CIfrObj (EFI_IFR_LENGTH_OP
, (CHAR8
**)&mLength
),
2202 CIfrOpHeader (EFI_IFR_LENGTH_OP
, &mLength
->Header
) {
2207 class CIfrNot
: public CIfrObj
, public CIfrOpHeader
{
2214 ) : CIfrObj (EFI_IFR_NOT_OP
, (CHAR8
**)&mNot
),
2215 CIfrOpHeader (EFI_IFR_NOT_OP
, &mNot
->Header
) {
2220 class CIfrBitWiseNot
: public CIfrObj
, public CIfrOpHeader
{
2222 EFI_IFR_BITWISE_NOT
*mBitWise
;
2227 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP
, (CHAR8
**)&mBitWise
),
2228 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP
, &mBitWise
->Header
) {
2233 class CIfrToBoolean
: public CIfrObj
, public CIfrOpHeader
{
2235 EFI_IFR_TO_BOOLEAN
*mToBoolean
;
2240 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP
, (CHAR8
**)&mToBoolean
),
2241 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP
, &mToBoolean
->Header
) {
2246 class CIfrToString
: public CIfrObj
, public CIfrOpHeader
{
2248 EFI_IFR_TO_STRING
*mToString
;
2253 ) : CIfrObj (EFI_IFR_TO_STRING_OP
, (CHAR8
**)&mToString
),
2254 CIfrOpHeader (EFI_IFR_TO_STRING_OP
, &mToString
->Header
) {
2258 VOID
SetFormat (IN UINT8 Format
) {
2259 mToString
->Format
= Format
;
2263 class CIfrToUint
: public CIfrObj
, public CIfrOpHeader
{
2265 EFI_IFR_TO_UINT
*mToUint
;
2270 ) : CIfrObj (EFI_IFR_TO_UINT_OP
, (CHAR8
**)&mToUint
),
2271 CIfrOpHeader (EFI_IFR_TO_UINT_OP
, &mToUint
->Header
) {
2276 class CIfrToUpper
: public CIfrObj
, public CIfrOpHeader
{
2278 EFI_IFR_TO_UPPER
*mToUpper
;
2283 ) : CIfrObj (EFI_IFR_TO_UPPER_OP
, (CHAR8
**)&mToUpper
),
2284 CIfrOpHeader (EFI_IFR_TO_UPPER_OP
, &mToUpper
->Header
) {
2289 class CIfrToLower
: public CIfrObj
, public CIfrOpHeader
{
2291 EFI_IFR_TO_LOWER
*mToLower
;
2296 ) : CIfrObj (EFI_IFR_TO_LOWER_OP
, (CHAR8
**)&mToLower
),
2297 CIfrOpHeader (EFI_IFR_TO_LOWER_OP
, &mToLower
->Header
) {
2302 class CIfrAdd
: public CIfrObj
, public CIfrOpHeader
{
2309 ) : CIfrObj (EFI_IFR_ADD_OP
, (CHAR8
**)&mAdd
),
2310 CIfrOpHeader (EFI_IFR_ADD_OP
, &mAdd
->Header
) {
2315 class CIfrBitWiseAnd
: public CIfrObj
, public CIfrOpHeader
{
2317 EFI_IFR_BITWISE_AND
*mBitWiseAnd
;
2322 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP
, (CHAR8
**)&mBitWiseAnd
),
2323 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP
, &mBitWiseAnd
->Header
) {
2328 class CIfrBitWiseOr
: public CIfrObj
, public CIfrOpHeader
{
2330 EFI_IFR_BITWISE_OR
*mBitWiseOr
;
2335 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP
, (CHAR8
**)&mBitWiseOr
),
2336 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP
, &mBitWiseOr
->Header
) {
2341 class CIfrAnd
: public CIfrObj
, public CIfrOpHeader
{
2348 ) : CIfrObj (EFI_IFR_AND_OP
, (CHAR8
**)&mAnd
),
2349 CIfrOpHeader (EFI_IFR_AND_OP
, &mAnd
->Header
) {
2354 class CIfrCatenate
: public CIfrObj
, public CIfrOpHeader
{
2356 EFI_IFR_CATENATE
*mCatenate
;
2361 ) : CIfrObj (EFI_IFR_CATENATE_OP
, (CHAR8
**)&mCatenate
),
2362 CIfrOpHeader (EFI_IFR_CATENATE_OP
, &mCatenate
->Header
) {
2367 class CIfrDivide
: public CIfrObj
, public CIfrOpHeader
{
2369 EFI_IFR_DIVIDE
*mDivide
;
2374 ) : CIfrObj (EFI_IFR_DIVIDE_OP
, (CHAR8
**)&mDivide
),
2375 CIfrOpHeader (EFI_IFR_DIVIDE_OP
, &mDivide
->Header
) {
2380 class CIfrEqual
: public CIfrObj
, public CIfrOpHeader
{
2382 EFI_IFR_EQUAL
*mEqual
;
2387 ) : CIfrObj (EFI_IFR_EQUAL_OP
, (CHAR8
**)&mEqual
),
2388 CIfrOpHeader (EFI_IFR_EQUAL_OP
, &mEqual
->Header
) {
2393 class CIfrGreaterEqual
: public CIfrObj
, public CIfrOpHeader
{
2395 EFI_IFR_GREATER_EQUAL
*mGreaterEqual
;
2400 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP
, (CHAR8
**)&mGreaterEqual
),
2401 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP
, &mGreaterEqual
->Header
) {
2406 class CIfrGreaterThan
: public CIfrObj
, public CIfrOpHeader
{
2408 EFI_IFR_GREATER_THAN
*mGreaterThan
;
2413 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP
, (CHAR8
**)&mGreaterThan
),
2414 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP
, &mGreaterThan
->Header
) {
2419 class CIfrLessEqual
: public CIfrObj
, public CIfrOpHeader
{
2421 EFI_IFR_LESS_EQUAL
*mLessEqual
;
2426 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP
, (CHAR8
**)&mLessEqual
),
2427 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP
, &mLessEqual
->Header
) {
2432 class CIfrLessThan
: public CIfrObj
, public CIfrOpHeader
{
2434 EFI_IFR_LESS_THAN
*mLessThan
;
2439 ) : CIfrObj (EFI_IFR_LESS_THAN_OP
, (CHAR8
**)&mLessThan
),
2440 CIfrOpHeader (EFI_IFR_LESS_THAN_OP
, &mLessThan
->Header
) {
2445 class CIfrMap
: public CIfrObj
, public CIfrOpHeader
{
2452 ) : CIfrObj (EFI_IFR_MAP_OP
, (CHAR8
**)&mMap
),
2453 CIfrOpHeader (EFI_IFR_MAP_OP
, &mMap
->Header
) {
2458 class CIfrMatch
: public CIfrObj
, public CIfrOpHeader
{
2460 EFI_IFR_MATCH
*mMatch
;
2465 ) : CIfrObj (EFI_IFR_MATCH_OP
, (CHAR8
**)&mMatch
),
2466 CIfrOpHeader (EFI_IFR_MATCH_OP
, &mMatch
->Header
) {
2471 class CIfrMultiply
: public CIfrObj
, public CIfrOpHeader
{
2473 EFI_IFR_MULTIPLY
*mMultiply
;
2478 ) : CIfrObj (EFI_IFR_MULTIPLY_OP
, (CHAR8
**)&mMultiply
),
2479 CIfrOpHeader (EFI_IFR_MULTIPLY_OP
, &mMultiply
->Header
) {
2484 class CIfrModulo
: public CIfrObj
, public CIfrOpHeader
{
2486 EFI_IFR_MODULO
*mModulo
;
2491 ) : CIfrObj (EFI_IFR_MODULO_OP
, (CHAR8
**)&mModulo
),
2492 CIfrOpHeader (EFI_IFR_MODULO_OP
, &mModulo
->Header
) {
2497 class CIfrNotEqual
: public CIfrObj
, public CIfrOpHeader
{
2499 EFI_IFR_NOT_EQUAL
*mNotEqual
;
2504 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP
, (CHAR8
**)&mNotEqual
),
2505 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP
, &mNotEqual
->Header
) {
2510 class CIfrOr
: public CIfrObj
, public CIfrOpHeader
{
2517 ) : CIfrObj (EFI_IFR_OR_OP
, (CHAR8
**)&mOr
),
2518 CIfrOpHeader (EFI_IFR_OR_OP
, &mOr
->Header
) {
2523 class CIfrShiftLeft
: public CIfrObj
, public CIfrOpHeader
{
2525 EFI_IFR_SHIFT_LEFT
*mShiftLeft
;
2530 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP
, (CHAR8
**)&mShiftLeft
),
2531 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP
, &mShiftLeft
->Header
) {
2536 class CIfrShiftRight
: public CIfrObj
, public CIfrOpHeader
{
2538 EFI_IFR_SHIFT_RIGHT
*mShiftRight
;
2543 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP
, (CHAR8
**)&mShiftRight
),
2544 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP
, &mShiftRight
->Header
) {
2549 class CIfrSubtract
: public CIfrObj
, public CIfrOpHeader
{
2551 EFI_IFR_SUBTRACT
*mSubtract
;
2556 ) : CIfrObj (EFI_IFR_SUBTRACT_OP
, (CHAR8
**)&mSubtract
),
2557 CIfrOpHeader (EFI_IFR_SUBTRACT_OP
, &mSubtract
->Header
) {
2562 class CIfrConditional
: public CIfrObj
, public CIfrOpHeader
{
2564 EFI_IFR_CONDITIONAL
*mConditional
;
2569 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP
, (CHAR8
**)&mConditional
),
2570 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP
, &mConditional
->Header
) {
2575 class CIfrFind
: public CIfrObj
, public CIfrOpHeader
{
2577 EFI_IFR_FIND
*mFind
;
2582 ) : CIfrObj (EFI_IFR_FIND_OP
, (CHAR8
**)&mFind
),
2583 CIfrOpHeader (EFI_IFR_FIND_OP
, &mFind
->Header
) {
2587 VOID
SetFormat (IN UINT8 Format
) {
2588 mFind
->Format
= Format
;
2592 class CIfrMid
: public CIfrObj
, public CIfrOpHeader
{
2599 ) : CIfrObj (EFI_IFR_MID_OP
, (CHAR8
**)&mMid
),
2600 CIfrOpHeader (EFI_IFR_MID_OP
, &mMid
->Header
) {
2605 class CIfrToken
: public CIfrObj
, public CIfrOpHeader
{
2607 EFI_IFR_TOKEN
*mToken
;
2612 ) : CIfrObj (EFI_IFR_TOKEN_OP
, (CHAR8
**)&mToken
),
2613 CIfrOpHeader (EFI_IFR_TOKEN_OP
, &mToken
->Header
) {
2618 class CIfrSpan
: public CIfrObj
, public CIfrOpHeader
{
2620 EFI_IFR_SPAN
*mSpan
;
2625 ) : CIfrObj (EFI_IFR_SPAN_OP
, (CHAR8
**)&mSpan
),
2626 CIfrOpHeader (EFI_IFR_SPAN_OP
, &mSpan
->Header
) {
2628 mSpan
->Flags
= EFI_IFR_FLAGS_FIRST_MATCHING
;
2631 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
2632 if (_IS_EQUAL (LFlags
, EFI_IFR_FLAGS_FIRST_MATCHING
)) {
2633 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_MATCHING
;
2634 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_FIRST_NON_MATCHING
)) {
2635 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_NON_MATCHING
;
2638 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;