1 #ifndef _EFIIFRCLASS_H_
2 #define _EFIIFRCLASS_H_
7 #include "VfrUtilityLib.h"
10 * The functions below are used for flags setting
12 static inline BOOLEAN
_FLAGS_ZERO (
19 static inline VOID
_FLAG_CLEAR (
27 static inline UINT8
_FLAG_TEST_AND_CLEAR (
32 UINT8 Ret
= Flags
& Mask
;
37 static inline UINT8
_IS_EQUAL (
42 return Flags
== Value
;
46 * The definition of CIfrBin
53 struct SPendingAssign
{
54 INT8
*mKey
; // key ! unique
59 struct SPendingAssign
*mNext
;
61 SPendingAssign (IN INT8
*, IN VOID
*, IN UINT32
, IN UINT32
);
64 VOID
SetAddrAndLen (IN VOID
*, IN UINT32
);
65 VOID
AssignValue (IN VOID
*, IN UINT32
);
73 struct SBufferNode
*mNext
;
79 SBufferNode
*mBufferNodeQueueHead
;
80 SBufferNode
*mBufferNodeQueueTail
;
81 SBufferNode
*mCurrBufferNode
;
83 SBufferNode
*mReadBufferNode
;
84 UINT32 mReadBufferOffset
;
88 VOID
_WRITE_PKG_LINE (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
89 VOID
_WRITE_PKG_END (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
92 SPendingAssign
*PendingAssignList
;
95 CFormPkg (IN UINT32 BufferSize
);
98 CHAR8
* IfrBinBufferGet (IN UINT32
);
99 inline UINT32
GetPkgLength (VOID
);
102 UINT32
Read (IN CHAR8
*, IN UINT32
);
105 EFI_VFR_RETURN_CODE
BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER
**);
106 EFI_VFR_RETURN_CODE
BuildPkg (IN
FILE *);
107 EFI_VFR_RETURN_CODE
GenCFile (IN INT8
*, IN
FILE *);
110 EFI_VFR_RETURN_CODE
AssignPending (IN INT8
*, IN VOID
*, IN UINT32
, IN UINT32
);
111 VOID
DoPendingAssign (IN INT8
*, IN VOID
*, IN UINT32
);
112 bool HavePendingUnassigned (VOID
);
113 VOID
PendingAssignPrintAll (VOID
);
116 extern CFormPkg gCFormPkg
;
129 #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
130 #define EFI_IFR_RECORDINFO_IDX_START 0x0
132 class CIfrRecordInfoDB
{
136 SIfrRecord
*mIfrRecordListHead
;
137 SIfrRecord
*mIfrRecordListTail
;
139 SIfrRecord
* GetRecordInfoFromIdx (IN UINT32
);
141 CIfrRecordInfoDB (VOID
);
142 ~CIfrRecordInfoDB (VOID
);
144 inline VOID
TurnOn (VOID
) {
148 inline VOID
TurnOff (VOID
) {
152 UINT32
IfrRecordRegister (IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
153 VOID
IfrRecordInfoUpdate (IN UINT32
, IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
154 VOID
IfrRecordOutput (IN
FILE *, IN UINT32 LineNo
);
157 extern CIfrRecordInfoDB gCIfrRecordInfoDB
;
160 * The definition of CIfrObj
162 extern bool gCreateOp
;
174 VOID
_EMIT_PENDING_OBJ (VOID
);
177 CIfrObj (IN UINT8 OpCode
, OUT CHAR8
**IfrObj
= NULL
, IN UINT8 ObjBinLen
= 0, IN BOOLEAN DelayEmit
= FALSE
);
178 virtual ~CIfrObj(VOID
);
180 inline VOID
SetLineNo (IN UINT32 LineNo
) {
184 inline CHAR8
* GetObjBinAddr (VOID
) {
188 inline UINT8
GetObjBinLen (VOID
) {
192 inline bool ExpendObjBin (IN UINT8 Size
) {
193 if ((mDelayEmit
== TRUE
) && ((mObjBinLen
+ Size
) > mObjBinLen
)) {
203 * The definition of CIfrOpHeader
207 EFI_IFR_OP_HEADER
*mHeader
;
210 CIfrOpHeader (IN UINT8 OpCode
, IN VOID
*StartAddr
, IN UINT8 Length
= 0);
211 CIfrOpHeader (IN CIfrOpHeader
&);
213 VOID
IncLength (UINT8 Size
) {
214 if ((mHeader
->Length
+ Size
) > mHeader
->Length
) {
215 mHeader
->Length
+= Size
;
219 VOID
DecLength (UINT8 Size
) {
220 if (mHeader
->Length
>= Size
) {
226 return mHeader
->Length
;
230 return mHeader
->Scope
;
233 VOID
SetScope (IN UINT8 Scope
) {
234 mHeader
->Scope
= Scope
;
238 extern UINT8 gScopeCount
;
241 * The definition of CIfrStatementHeader
243 class CIfrStatementHeader
{
245 EFI_IFR_STATEMENT_HEADER
*mHeader
;
248 CIfrStatementHeader (
249 IN EFI_IFR_STATEMENT_HEADER
*StartAddr
250 ) : mHeader ((EFI_IFR_STATEMENT_HEADER
*)StartAddr
) {
252 mHeader
->Help
= EFI_STRING_ID_INVALID
;
253 mHeader
->Prompt
= EFI_STRING_ID_INVALID
;
256 EFI_IFR_STATEMENT_HEADER
*GetStatementHeader () {
260 VOID
SetPrompt (IN EFI_STRING_ID Prompt
) {
261 mHeader
->Prompt
= Prompt
;
264 VOID
SetHelp (IN EFI_STRING_ID Help
) {
265 mHeader
->Help
= Help
;
270 * The definition of CIfrQuestionHeader
272 #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
274 class CIfrQuestionHeader
: public CIfrStatementHeader
{
276 EFI_IFR_QUESTION_HEADER
*mHeader
;
278 EFI_IFR_STATEMENT_HEADER
* QH2SH (EFI_IFR_QUESTION_HEADER
*Qheader
) {
279 return &(Qheader
)->Header
;
283 EFI_QUESTION_ID
QUESTION_ID (VOID
) {
284 return mHeader
->QuestionId
;
287 EFI_VARSTORE_ID
VARSTORE_ID (VOID
) {
288 return mHeader
->VarStoreId
;
291 VOID
VARSTORE_INFO (OUT EFI_VARSTORE_INFO
*Info
) {
293 Info
->mVarStoreId
= mHeader
->VarStoreId
;
294 memcpy (&Info
->mVarStoreId
, &mHeader
->VarStoreInfo
, sizeof (Info
->mVarStoreId
));
299 return mHeader
->Flags
;
304 IN EFI_IFR_QUESTION_HEADER
*StartAddr
,
305 IN UINT8 Flags
= EFI_IFR_QUESTION_FLAG_DEFAULT
306 ) : CIfrStatementHeader (QH2SH(StartAddr
)) {
308 mHeader
->QuestionId
= EFI_QUESTION_ID_INVALID
;
309 mHeader
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
310 mHeader
->VarStoreInfo
.VarName
= EFI_STRING_ID_INVALID
;
311 mHeader
->VarStoreInfo
.VarOffset
= EFI_VAROFFSET_INVALID
;
312 mHeader
->Flags
= Flags
;
315 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
316 mHeader
->QuestionId
= QuestionId
;
319 VOID
SetVarStoreInfo (IN EFI_VARSTORE_INFO
*Info
) {
320 mHeader
->VarStoreId
= Info
->mVarStoreId
;
321 mHeader
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
322 mHeader
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
325 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 Flags
) {
326 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_READ_ONLY
)) {
327 mHeader
->Flags
|= EFI_IFR_FLAG_READ_ONLY
;
330 _FLAG_CLEAR (Flags
, 0x02);
332 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_CALLBACK
)) {
333 mHeader
->Flags
|= EFI_IFR_FLAG_CALLBACK
;
336 _FLAG_CLEAR (Flags
, 0x08);
338 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RESET_REQUIRED
)) {
339 mHeader
->Flags
|= EFI_IFR_FLAG_RESET_REQUIRED
;
342 _FLAG_CLEAR (Flags
, 0x20);
344 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_OPTIONS_ONLY
)) {
345 mHeader
->Flags
|= EFI_IFR_FLAG_OPTIONS_ONLY
;
348 return _FLAGS_ZERO (Flags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
352 static CIfrQuestionHeader
*gCurrentQuestion
= NULL
;
355 * The definition of CIfrMinMaxStepData
357 class CIfrMinMaxStepData
{
359 MINMAXSTEP_DATA
*mMinMaxStepData
;
362 CIfrMinMaxStepData (MINMAXSTEP_DATA
*DataAddr
) : mMinMaxStepData (DataAddr
) {
363 mMinMaxStepData
->u64
.MinValue
= 0;
364 mMinMaxStepData
->u64
.MaxValue
= 0;
365 mMinMaxStepData
->u64
.Step
= 0;
368 VOID
SetMinMaxStepData (IN UINT64 MinValue
, IN UINT64 MaxValue
, IN UINT64 Step
) {
369 mMinMaxStepData
->u64
.MinValue
= MinValue
;
370 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
371 mMinMaxStepData
->u64
.Step
= Step
;
374 VOID
SetMinMaxStepData (IN UINT32 MinValue
, IN UINT32 MaxValue
, IN UINT32 Step
) {
375 mMinMaxStepData
->u32
.MinValue
= MinValue
;
376 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
377 mMinMaxStepData
->u32
.Step
= Step
;
380 VOID
SetMinMaxStepData (IN UINT16 MinValue
, IN UINT16 MaxValue
, IN UINT16 Step
) {
381 mMinMaxStepData
->u16
.MinValue
= MinValue
;
382 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
383 mMinMaxStepData
->u16
.Step
= Step
;
386 VOID
SetMinMaxStepData (IN UINT8 MinValue
, IN UINT8 MaxValue
, IN UINT8 Step
) {
387 mMinMaxStepData
->u8
.MinValue
= MinValue
;
388 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
389 mMinMaxStepData
->u8
.Step
= Step
;
395 * The definition of all of the UEFI IFR Objects
397 class CIfrFormSet
: public CIfrObj
, public CIfrOpHeader
{
399 EFI_IFR_FORM_SET
*mFormSet
;
402 CIfrFormSet () : CIfrObj (EFI_IFR_FORM_SET_OP
, (CHAR8
**)&mFormSet
),
403 CIfrOpHeader (EFI_IFR_FORM_SET_OP
, &mFormSet
->Header
) {
404 mFormSet
->Help
= EFI_STRING_ID_INVALID
;
405 mFormSet
->FormSetTitle
= EFI_STRING_ID_INVALID
;
406 memset (&mFormSet
->Guid
, 0, sizeof (EFI_GUID
));
409 VOID
SetGuid (IN EFI_GUID
*Guid
) {
410 memcpy (&mFormSet
->Guid
, Guid
, sizeof (EFI_GUID
));
413 VOID
SetFormSetTitle (IN EFI_STRING_ID FormSetTitle
) {
414 mFormSet
->FormSetTitle
= FormSetTitle
;
417 VOID
SetHelp (IN EFI_STRING_ID Help
) {
418 mFormSet
->Help
= Help
;
422 class CIfrEnd
: public CIfrObj
, public CIfrOpHeader
{
427 CIfrEnd () : CIfrObj (EFI_IFR_END_OP
, (CHAR8
**)&mEnd
),
428 CIfrOpHeader (EFI_IFR_END_OP
, &mEnd
->Header
) {}
431 class CIfrDefaultStore
: public CIfrObj
, public CIfrOpHeader
{
433 EFI_IFR_DEFAULTSTORE
*mDefaultStore
;
436 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP
, (CHAR8
**)&mDefaultStore
),
437 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP
, &mDefaultStore
->Header
) {
438 mDefaultStore
->DefaultId
= EFI_VARSTORE_ID_INVALID
;
439 mDefaultStore
->DefaultName
= EFI_STRING_ID_INVALID
;
442 VOID
SetDefaultName (IN EFI_STRING_ID DefaultName
) {
443 mDefaultStore
->DefaultName
= DefaultName
;
446 VOID
SetDefaultId (IN UINT16 DefaultId
) {
447 mDefaultStore
->DefaultId
= DefaultId
;
451 #define EFI_FORM_ID_MAX 0xFFFF
452 #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
454 class CIfrForm
: public CIfrObj
, public CIfrOpHeader
{
458 STATIC UINT32 FormIdBitMap
[EFI_FREE_FORM_ID_BITMAP_SIZE
];
460 STATIC BOOLEAN
ChekFormIdFree (IN EFI_FORM_ID FormId
) {
461 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
462 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
464 return (FormIdBitMap
[Index
] & (0x80000000 >> Offset
)) == 0;
467 STATIC VOID
MarkFormIdUsed (IN EFI_FORM_ID FormId
) {
468 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
469 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
471 FormIdBitMap
[Index
] |= (0x80000000 >> Offset
);
475 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP
, (CHAR8
**)&mForm
),
476 CIfrOpHeader (EFI_IFR_FORM_OP
, &mForm
->Header
) {
478 mForm
->FormTitle
= EFI_STRING_ID_INVALID
;
481 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
482 if (CIfrForm::ChekFormIdFree (FormId
) == FALSE
) {
483 return VFR_RETURN_FORMID_REDEFINED
;
485 mForm
->FormId
= FormId
;
486 CIfrForm::MarkFormIdUsed (FormId
);
487 return VFR_RETURN_SUCCESS
;
490 VOID
SetFormTitle (IN EFI_STRING_ID FormTitle
) {
491 mForm
->FormTitle
= FormTitle
;
495 class CIfrVarStore
: public CIfrObj
, public CIfrOpHeader
{
497 EFI_IFR_VARSTORE
*mVarStore
;
500 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP
, (CHAR8
**)&mVarStore
, sizeof (EFI_IFR_VARSTORE
), TRUE
),
501 CIfrOpHeader (EFI_IFR_VARSTORE_OP
, &mVarStore
->Header
) {
502 mVarStore
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
504 memset (&mVarStore
->Guid
, 0, sizeof (EFI_GUID
));
505 mVarStore
->Name
[0] = '\0';
508 VOID
SetGuid (IN EFI_GUID
*Guid
) {
509 memcpy (&mVarStore
->Guid
, Guid
, sizeof (EFI_GUID
));
512 VOID
SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId
) {
513 mVarStore
->VarStoreId
= VarStoreId
;
516 VOID
SetSize (IN UINT16 Size
) {
517 mVarStore
->Size
= Size
;
520 VOID
SetName (IN INT8
*Name
) {
526 if (ExpendObjBin (Len
) == TRUE
) {
528 strcpy ((INT8
*)(mVarStore
->Name
), Name
);
535 class CIfrVarStoreEfi
: public CIfrObj
, public CIfrOpHeader
{
537 EFI_IFR_VARSTORE_EFI
*mVarStoreEfi
;
540 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP
, (CHAR8
**)&mVarStoreEfi
),
541 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP
, &mVarStoreEfi
->Header
) {
542 mVarStoreEfi
->VarStoreId
= EFI_VAROFFSET_INVALID
;
543 memset (&mVarStoreEfi
->Guid
, 0, sizeof (EFI_GUID
));
546 VOID
SetGuid (IN EFI_GUID
*Guid
) {
547 memcpy (&mVarStoreEfi
->Guid
, Guid
, sizeof (EFI_GUID
));
550 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
551 mVarStoreEfi
->VarStoreId
= VarStoreId
;
554 VOID
SetAttributes (IN UINT32 Attributes
) {
555 mVarStoreEfi
->Attributes
= Attributes
;
559 class CIfrVarStoreNameValue
: public CIfrObj
, public CIfrOpHeader
{
561 EFI_IFR_VARSTORE_NAME_VALUE
*mVarStoreNameValue
;
564 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP
, (CHAR8
**)&mVarStoreNameValue
),
565 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP
, &mVarStoreNameValue
->Header
) {
566 mVarStoreNameValue
->VarStoreId
= EFI_VAROFFSET_INVALID
;
567 memset (&mVarStoreNameValue
->Guid
, 0, sizeof (EFI_GUID
));
570 VOID
SetGuid (IN EFI_GUID
*Guid
) {
571 memcpy (&mVarStoreNameValue
->Guid
, Guid
, sizeof (EFI_GUID
));
574 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
575 mVarStoreNameValue
->VarStoreId
= VarStoreId
;
579 class CIfrImage
: public CIfrObj
, public CIfrOpHeader
{
581 EFI_IFR_IMAGE
*mImage
;
584 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP
, (CHAR8
**)&mImage
),
585 CIfrOpHeader (EFI_IFR_FORM_OP
, &mImage
->Header
) {
586 mImage
->Id
= EFI_IMAGE_ID_INVALID
;
589 VOID
SetImageId (IN EFI_IMAGE_ID ImageId
) {
590 mImage
->Id
= ImageId
;
594 class CIfrLocked
: public CIfrObj
, public CIfrOpHeader
{
596 EFI_IFR_LOCKED
*mLocked
;
599 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP
, (CHAR8
**)&mLocked
),
600 CIfrOpHeader (EFI_IFR_LOCKED_OP
, &mLocked
->Header
) {}
603 class CIfrRule
: public CIfrObj
, public CIfrOpHeader
{
608 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP
, (CHAR8
**)&mRule
),
609 mRule ((EFI_IFR_RULE
*)GetObjBinAddr()),
610 CIfrOpHeader (EFI_IFR_RULE_OP
, &mRule
->Header
) {
611 mRule
->RuleId
= EFI_RULE_ID_INVALID
;
614 VOID
SetRuleId (IN UINT8 RuleId
) {
615 mRule
->RuleId
= RuleId
;
619 static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue
= {0, };
621 class CIfrDefault
: public CIfrObj
, public CIfrOpHeader
{
623 EFI_IFR_DEFAULT
*mDefault
;
627 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
628 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
,
629 IN EFI_IFR_TYPE_VALUE Value
= gZeroEfiIfrTypeValue
630 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
),
631 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
) {
632 mDefault
->Type
= Type
;
633 mDefault
->Value
= Value
;
634 mDefault
->DefaultId
= DefaultId
;
637 VOID
SetDefaultId (IN UINT16 DefaultId
) {
638 mDefault
->DefaultId
= DefaultId
;
641 VOID
SetType (IN UINT8 Type
) {
642 mDefault
->Type
= Type
;
645 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
646 mDefault
->Value
= Value
;
650 class CIfrValue
: public CIfrObj
, public CIfrOpHeader
{
652 EFI_IFR_VALUE
*mValue
;
655 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP
, (CHAR8
**)&mValue
),
656 CIfrOpHeader (EFI_IFR_VALUE_OP
, &mValue
->Header
) {}
660 class CIfrSubtitle
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
662 EFI_IFR_SUBTITLE
*mSubtitle
;
665 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP
, (CHAR8
**)&mSubtitle
),
666 CIfrOpHeader (EFI_IFR_SUBTITLE_OP
, &mSubtitle
->Header
),
667 CIfrStatementHeader (&mSubtitle
->Statement
) {
668 mSubtitle
->Flags
= 0;
671 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
672 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_HORIZONTAL
)) {
673 mSubtitle
->Flags
|= EFI_IFR_FLAGS_HORIZONTAL
;
676 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
680 class CIfrText
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
685 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP
, (CHAR8
**)&mText
),
686 CIfrOpHeader (EFI_IFR_TEXT_OP
, &mText
->Header
),
687 CIfrStatementHeader (&mText
->Statement
) {
688 mText
->TextTwo
= EFI_STRING_ID_INVALID
;
691 VOID
SetTextTwo (IN EFI_STRING_ID StringId
) {
692 mText
->TextTwo
= StringId
;
696 class CIfrRef
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
701 CIfrRef () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef
),
702 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef
->Header
),
703 CIfrQuestionHeader (&mRef
->Question
) {
707 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
708 mRef
->FormId
= FormId
;
712 class CIfrRef2
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
717 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef2
, sizeof (EFI_IFR_REF2
)),
718 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef2
->Header
, sizeof (EFI_IFR_REF2
)),
719 CIfrQuestionHeader (&mRef2
->Question
) {
721 mRef2
->QuestionId
= EFI_QUESTION_ID_INVALID
;
724 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
725 mRef2
->FormId
= FormId
;
728 EFI_VFR_RETURN_CODE
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
729 if (QuestionId
== EFI_QUESTION_ID_INVALID
) {
730 return VFR_RETURN_UNDEFINED
;
732 mRef2
->QuestionId
= QuestionId
;
733 return VFR_RETURN_SUCCESS
;
737 class CIfrRef3
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
742 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef3
, sizeof(EFI_IFR_REF3
)),
743 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef3
->Header
, sizeof (EFI_IFR_REF3
)),
744 CIfrQuestionHeader (&mRef3
->Question
) {
746 mRef3
->QuestionId
= EFI_QUESTION_ID_INVALID
;
747 memset (&mRef3
->FormSetId
, 0, sizeof (EFI_GUID
));
750 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
751 mRef3
->FormId
= FormId
;
754 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
755 mRef3
->QuestionId
= QuestionId
;
758 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
759 mRef3
->FormSetId
= FormSetId
;
763 class CIfrRef4
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
768 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef4
, sizeof(EFI_IFR_REF3
)),
769 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef4
->Header
, sizeof (EFI_IFR_REF3
)),
770 CIfrQuestionHeader (&mRef4
->Question
) {
772 mRef4
->QuestionId
= EFI_QUESTION_ID_INVALID
;
773 memset (&mRef4
->FormSetId
, 0, sizeof (EFI_GUID
));
774 mRef4
->DevicePath
= EFI_STRING_ID_INVALID
;
777 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
778 mRef4
->FormId
= FormId
;
781 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
782 mRef4
->QuestionId
= QuestionId
;
785 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
786 mRef4
->FormSetId
= FormSetId
;
789 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
790 mRef4
->DevicePath
= DevicePath
;
794 class CIfrResetButton
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
796 EFI_IFR_RESET_BUTTON
*mResetButton
;
799 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP
, (CHAR8
**)&mResetButton
),
800 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP
, &mResetButton
->Header
),
801 CIfrStatementHeader (&mResetButton
->Question
.Header
) {
802 mResetButton
->DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
805 VOID
SetDefaultId (IN UINT16 DefaultId
) {
806 mResetButton
->DefaultId
= DefaultId
;
810 class CIfrCheckBox
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
812 EFI_IFR_CHECKBOX
*mCheckBox
;
815 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP
, (CHAR8
**)&mCheckBox
),
816 CIfrOpHeader (EFI_IFR_CHECKBOX_OP
, &mCheckBox
->Header
),
817 CIfrQuestionHeader (&mCheckBox
->Question
) {
818 mCheckBox
->Flags
= EFI_IFR_CHECKBOX_DEFAULT
;
819 gCurrentQuestion
= this;
823 gCurrentQuestion
= NULL
;
826 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, UINT8 LFlags
) {
827 EFI_VFR_RETURN_CODE Ret
;
829 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
830 if (Ret
!= VFR_RETURN_SUCCESS
) {
834 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT
)) {
835 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT
;
838 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT_MFG
)) {
839 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT_MFG
;
842 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
846 class CIfrAction
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
848 EFI_IFR_ACTION
*mAction
;
851 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP
, (CHAR8
**)&mAction
),
852 CIfrOpHeader (EFI_IFR_ACTION_OP
, &mAction
->Header
),
853 CIfrQuestionHeader (&mAction
->Question
) {
854 mAction
->QuestionConfig
= EFI_STRING_ID_INVALID
;
857 VOID
SetQuestionConfig (IN EFI_STRING_ID QuestionConfig
) {
858 mAction
->QuestionConfig
= QuestionConfig
;
862 class CIfrDate
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
867 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP
, (CHAR8
**)&mDate
),
868 CIfrOpHeader (EFI_IFR_DATE_OP
, &mDate
->Header
),
869 CIfrQuestionHeader (&mDate
->Question
) {
873 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
874 EFI_VFR_RETURN_CODE Ret
;
876 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
877 if (Ret
!= VFR_RETURN_SUCCESS
) {
881 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_YEAR_SUPPRESS
)) {
882 mDate
->Flags
|= EFI_QF_DATE_YEAR_SUPPRESS
;
885 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_MONTH_SUPPRESS
)) {
886 mDate
->Flags
|= EFI_QF_DATE_MONTH_SUPPRESS
;
889 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_DAY_SUPPRESS
)) {
890 mDate
->Flags
|= EFI_QF_DATE_DAY_SUPPRESS
;
893 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_NORMAL
)) {
894 mDate
->Flags
|= QF_DATE_STORAGE_NORMAL
;
895 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_TIME
)) {
896 mDate
->Flags
|= QF_DATE_STORAGE_TIME
;
897 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_WAKEUP
)) {
898 mDate
->Flags
|= QF_DATE_STORAGE_WAKEUP
;
901 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
905 class CIfrNumeric
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
907 EFI_IFR_NUMERIC
*mNumeric
;
910 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP
, (CHAR8
**)&mNumeric
),
911 CIfrOpHeader (EFI_IFR_NUMERIC_OP
, &mNumeric
->Header
),
912 CIfrQuestionHeader (&mNumeric
->Question
),
913 CIfrMinMaxStepData (&mNumeric
->data
) {
914 mNumeric
->Flags
= EFI_IFR_NUMERIC_SIZE_1
| EFI_IFR_DISPLAY_UINT_DEC
;
915 gCurrentQuestion
= this;
919 gCurrentQuestion
= NULL
;
922 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
923 EFI_VFR_RETURN_CODE Ret
;
925 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
926 if (Ret
!= VFR_RETURN_SUCCESS
) {
930 if (LFlags
& EFI_IFR_DISPLAY
) {
931 mNumeric
->Flags
= LFlags
;
933 mNumeric
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
935 return VFR_RETURN_SUCCESS
;
939 class CIfrOneOf
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
941 EFI_IFR_ONE_OF
*mOneOf
;
944 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP
, (CHAR8
**)&mOneOf
),
945 CIfrOpHeader (EFI_IFR_ONE_OF_OP
, &mOneOf
->Header
),
946 CIfrQuestionHeader (&mOneOf
->Question
),
947 CIfrMinMaxStepData (&mOneOf
->data
) {
949 gCurrentQuestion
= this;
953 gCurrentQuestion
= NULL
;
956 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
957 EFI_VFR_RETURN_CODE Ret
;
959 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
960 if (Ret
!= VFR_RETURN_SUCCESS
) {
964 if (LFlags
& EFI_IFR_DISPLAY
) {
965 mOneOf
->Flags
= LFlags
;
967 mOneOf
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
969 return VFR_RETURN_SUCCESS
;
973 class CIfrString
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
975 EFI_IFR_STRING
*mString
;
978 CIfrString () : CIfrObj (EFI_IFR_STRING_OP
, (CHAR8
**)&mString
),
979 CIfrOpHeader (EFI_IFR_STRING_OP
, &mString
->Header
),
980 CIfrQuestionHeader (&mString
->Question
) {
982 mString
->MinSize
= 0;
983 mString
->MaxSize
= 0;
984 gCurrentQuestion
= this;
988 gCurrentQuestion
= NULL
;
991 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
992 EFI_VFR_RETURN_CODE Ret
;
994 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
995 if (Ret
!= VFR_RETURN_SUCCESS
) {
999 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_STRING_MULTI_LINE
)) {
1000 mString
->Flags
|= EFI_IFR_STRING_MULTI_LINE
;
1003 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1006 VOID
SetMinSize (IN UINT8 Flags
) {
1007 mString
->MinSize
= Flags
;
1010 VOID
SetMaxSize (IN UINT8 MaxSize
) {
1011 mString
->MaxSize
= MaxSize
;
1015 class CIfrPassword
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1017 EFI_IFR_PASSWORD
*mPassword
;
1020 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP
, (CHAR8
**)&mPassword
),
1021 CIfrOpHeader (EFI_IFR_PASSWORD_OP
, &mPassword
->Header
),
1022 CIfrQuestionHeader (&mPassword
->Question
) {
1023 mPassword
->MinSize
= 0;
1024 mPassword
->MaxSize
= 0;
1025 gCurrentQuestion
= this;
1029 gCurrentQuestion
= NULL
;
1032 VOID
SetMinSize (IN UINT16 MinSize
) {
1033 mPassword
->MinSize
= MinSize
;
1036 VOID
SetMaxSize (IN UINT16 MaxSize
) {
1037 mPassword
->MaxSize
= MaxSize
;
1041 class CIfrOrderedList
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1043 EFI_IFR_ORDERED_LIST
*mOrderedList
;
1046 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP
, (CHAR8
**)&mOrderedList
),
1047 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP
, &mOrderedList
->Header
),
1048 CIfrQuestionHeader (&mOrderedList
->Question
) {
1049 mOrderedList
->MaxContainers
= 0;
1050 mOrderedList
->Flags
= 0;
1051 gCurrentQuestion
= this;
1054 ~CIfrOrderedList () {
1055 gCurrentQuestion
= NULL
;
1058 VOID
SetMaxContainers (IN UINT8 MaxContainers
) {
1059 mOrderedList
->MaxContainers
= MaxContainers
;
1062 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1063 EFI_VFR_RETURN_CODE Ret
;
1065 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1066 if (Ret
!= VFR_RETURN_SUCCESS
) {
1070 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_UNIQUE_SET
)) {
1071 mOrderedList
->Flags
|= EFI_IFR_UNIQUE_SET
;
1074 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_NO_EMPTY_SET
)) {
1075 mOrderedList
->Flags
|= EFI_IFR_NO_EMPTY_SET
;
1078 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1082 class CIfrTime
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1084 EFI_IFR_TIME
*mTime
;
1087 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP
, (CHAR8
**)&mTime
),
1088 CIfrOpHeader (EFI_IFR_TIME_OP
, &mTime
->Header
),
1089 CIfrQuestionHeader (&mTime
->Question
) {
1093 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1094 EFI_VFR_RETURN_CODE Ret
;
1096 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1097 if (Ret
!= VFR_RETURN_SUCCESS
) {
1101 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_HOUR_SUPPRESS
)) {
1102 mTime
->Flags
|= QF_TIME_HOUR_SUPPRESS
;
1105 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_MINUTE_SUPPRESS
)) {
1106 mTime
->Flags
|= QF_TIME_MINUTE_SUPPRESS
;
1109 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_SECOND_SUPPRESS
)) {
1110 mTime
->Flags
|= QF_TIME_SECOND_SUPPRESS
;
1113 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_NORMAL
)) {
1114 mTime
->Flags
|= QF_TIME_STORAGE_NORMAL
;
1115 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_TIME
)) {
1116 mTime
->Flags
|= QF_TIME_STORAGE_TIME
;
1117 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_WAKEUP
)) {
1118 mTime
->Flags
|= QF_TIME_STORAGE_WAKEUP
;
1121 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1125 class CIfrDisableIf
: public CIfrObj
, public CIfrOpHeader
{
1127 EFI_IFR_DISABLE_IF
*mDisableIf
;
1130 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP
, (CHAR8
**)&mDisableIf
),
1131 mDisableIf ((EFI_IFR_DISABLE_IF
*) GetObjBinAddr()),
1132 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP
, &mDisableIf
->Header
) {}
1135 class CIfrSuppressIf
: public CIfrObj
, public CIfrOpHeader
{
1137 EFI_IFR_SUPPRESS_IF
*mSuppressIf
;
1140 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP
, (CHAR8
**)&mSuppressIf
),
1141 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP
, &mSuppressIf
->Header
) {}
1144 class CIfrGrayOutIf
: public CIfrObj
, public CIfrOpHeader
{
1146 EFI_IFR_GRAY_OUT_IF
*mGrayOutIf
;
1149 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP
, (CHAR8
**)&mGrayOutIf
),
1150 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP
, &mGrayOutIf
->Header
) {}
1153 class CIfrInconsistentIf
: public CIfrObj
, public CIfrOpHeader
{
1155 EFI_IFR_INCONSISTENT_IF
*mInconsistentIf
;
1158 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP
, (CHAR8
**)&mInconsistentIf
),
1159 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP
, &mInconsistentIf
->Header
) {
1160 mInconsistentIf
->Error
= EFI_STRING_ID_INVALID
;
1163 VOID
SetError (IN EFI_STRING_ID Error
) {
1164 mInconsistentIf
->Error
= Error
;
1168 class CIfrNoSubmitIf
: public CIfrObj
, public CIfrOpHeader
{
1170 EFI_IFR_NO_SUBMIT_IF
*mNoSubmitIf
;
1173 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP
, (CHAR8
**)&mNoSubmitIf
),
1174 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP
, &mNoSubmitIf
->Header
) {
1175 mNoSubmitIf
->Error
= EFI_STRING_ID_INVALID
;
1178 VOID
SetError (IN EFI_STRING_ID Error
) {
1179 mNoSubmitIf
->Error
= Error
;
1183 class CIfrRefresh
: public CIfrObj
, public CIfrOpHeader
{
1185 EFI_IFR_REFRESH
*mRefresh
;
1188 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP
, (CHAR8
**)&mRefresh
),
1189 CIfrOpHeader (EFI_IFR_REFRESH_OP
, &mRefresh
->Header
) {
1190 mRefresh
->RefreshInterval
= 0;
1193 VOID
SetRefreshInterval (IN UINT8 RefreshInterval
) {
1194 mRefresh
->RefreshInterval
= RefreshInterval
;
1198 class CIfrVarStoreDevice
: public CIfrObj
, public CIfrOpHeader
{
1200 EFI_IFR_VARSTORE_DEVICE
*mVarStoreDevice
;
1203 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP
, (CHAR8
**)&mVarStoreDevice
),
1204 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP
, &mVarStoreDevice
->Header
) {
1205 mVarStoreDevice
->DevicePath
= EFI_STRING_ID_INVALID
;
1208 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1209 mVarStoreDevice
->DevicePath
= DevicePath
;
1213 class CIfrOneOfOption
: public CIfrObj
, public CIfrOpHeader
{
1215 EFI_IFR_ONE_OF_OPTION
*mOneOfOption
;
1218 CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP
, (CHAR8
**)&mOneOfOption
),
1219 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP
, &mOneOfOption
->Header
) {
1220 mOneOfOption
->Flags
= 0;
1221 mOneOfOption
->Option
= EFI_STRING_ID_INVALID
;
1222 mOneOfOption
->Type
= EFI_IFR_TYPE_OTHER
;
1223 memset (&mOneOfOption
->Value
, 0, sizeof (mOneOfOption
->Value
));
1226 VOID
SetOption (IN EFI_STRING_ID Option
) {
1227 mOneOfOption
->Option
= Option
;
1230 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1231 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT
)) {
1232 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT
;
1235 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT_MFG
)) {
1236 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT_MFG
;
1239 if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
)) {
1240 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
);
1241 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_8
;
1242 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
)) {
1243 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
);
1244 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_16
;
1245 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
)) {
1246 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
);
1247 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_32
;
1248 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
)) {
1249 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
);
1250 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_64
;
1251 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_BOOLEAN
)) {
1252 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_BOOLEAN
);
1253 mOneOfOption
->Flags
|= EFI_IFR_TYPE_BOOLEAN
;
1254 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_TIME
)) {
1255 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_TIME
);
1256 mOneOfOption
->Flags
|= EFI_IFR_TYPE_TIME
;
1257 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_DATE
)) {
1258 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_DATE
);
1259 mOneOfOption
->Flags
|= EFI_IFR_TYPE_DATE
;
1260 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_STRING
)) {
1261 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_STRING
);
1262 mOneOfOption
->Flags
|= EFI_IFR_TYPE_STRING
;
1263 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_OTHER
)) {
1264 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_OTHER
);
1265 mOneOfOption
->Flags
|= EFI_IFR_TYPE_OTHER
;
1268 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1271 VOID
SetType (IN UINT8 Type
) {
1272 mOneOfOption
->Type
= Type
;
1275 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
1276 mOneOfOption
->Value
= Value
;
1279 UINT8
GetFlags (VOID
) {
1280 return mOneOfOption
->Flags
;
1284 static EFI_GUID IfrTianoGuid
= EFI_IFR_TIANO_GUID
;
1286 class CIfrClass
: public CIfrObj
, public CIfrOpHeader
{
1288 EFI_IFR_GUID_CLASS
*mClass
;
1291 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mClass
, sizeof (EFI_IFR_GUID_CLASS
)),
1292 CIfrOpHeader (EFI_IFR_GUID_OP
, &mClass
->Header
, sizeof (EFI_IFR_GUID_CLASS
)) {
1293 mClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_CLASS
;
1294 mClass
->Guid
= IfrTianoGuid
;
1295 mClass
->Class
= EFI_NON_DEVICE_CLASS
;
1298 VOID
SetClass (IN UINT16 Class
) {
1299 mClass
->Class
= Class
;
1303 class CIfrSubClass
: public CIfrObj
, public CIfrOpHeader
{
1305 EFI_IFR_GUID_SUBCLASS
*mSubClass
;
1308 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mSubClass
, sizeof (EFI_IFR_GUID_SUBCLASS
)),
1309 CIfrOpHeader (EFI_IFR_GUID_OP
, &mSubClass
->Header
, sizeof (EFI_IFR_GUID_SUBCLASS
)) {
1310 mSubClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_SUBCLASS
;
1311 mSubClass
->Guid
= IfrTianoGuid
;
1312 mSubClass
->SubClass
= EFI_SETUP_APPLICATION_SUBCLASS
;
1315 VOID
SetSubClass (IN UINT16 SubClass
) {
1316 mSubClass
->SubClass
= SubClass
;
1320 class CIfrLabel
: public CIfrObj
, public CIfrOpHeader
{
1322 EFI_IFR_GUID_LABEL
*mLabel
;
1325 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mLabel
, sizeof (EFI_IFR_GUID_LABEL
)),
1326 CIfrOpHeader (EFI_IFR_GUID_OP
, &mLabel
->Header
, sizeof (EFI_IFR_GUID_LABEL
)) {
1327 mLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1328 mLabel
->Guid
= IfrTianoGuid
;
1331 VOID
SetNumber (IN UINT16 Number
) {
1332 mLabel
->Number
= Number
;
1336 class CIfrBanner
: public CIfrObj
, public CIfrOpHeader
{
1338 EFI_IFR_GUID_BANNER
*mBanner
;
1341 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mBanner
, sizeof (EFI_IFR_GUID_BANNER
)),
1342 CIfrOpHeader (EFI_IFR_GUID_OP
, &mBanner
->Header
, sizeof (EFI_IFR_GUID_BANNER
)) {
1343 mBanner
->ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
1344 mBanner
->Guid
= IfrTianoGuid
;
1347 VOID
SetTitle (IN EFI_STRING_ID StringId
) {
1348 mBanner
->Title
= StringId
;
1351 VOID
SetLine (IN UINT16 Line
) {
1352 mBanner
->LineNumber
= Line
;
1355 VOID
SetAlign (IN UINT8 Align
) {
1356 mBanner
->Alignment
= Align
;
1360 class CIfrTimeout
: public CIfrObj
, public CIfrOpHeader
{
1362 EFI_IFR_GUID_TIMEOUT
*mTimeout
;
1365 CIfrTimeout (IN UINT16 Timeout
= 0) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mTimeout
, sizeof (EFI_IFR_GUID_TIMEOUT
)),
1366 CIfrOpHeader (EFI_IFR_GUID_OP
, &mTimeout
->Header
, sizeof (EFI_IFR_GUID_TIMEOUT
)) {
1367 mTimeout
->ExtendOpCode
= EFI_IFR_EXTEND_OP_TIMEOUT
;
1368 mTimeout
->Guid
= IfrTianoGuid
;
1369 mTimeout
->TimeOut
= Timeout
;
1372 VOID
SetTimeout (IN UINT16 Timeout
) {
1373 mTimeout
->TimeOut
= Timeout
;
1377 class CIfrDup
: public CIfrObj
, public CIfrOpHeader
{
1384 ) : CIfrObj (EFI_IFR_DUP_OP
, (CHAR8
**)&mDup
),
1385 CIfrOpHeader (EFI_IFR_DUP_OP
, &mDup
->Header
) {
1390 class CIfrEqIdId
: public CIfrObj
, public CIfrOpHeader
{
1392 EFI_IFR_EQ_ID_ID
*mEqIdId
;
1397 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP
, (CHAR8
**)&mEqIdId
),
1398 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP
, &mEqIdId
->Header
) {
1400 mEqIdId
->QuestionId1
= EFI_QUESTION_ID_INVALID
;
1401 mEqIdId
->QuestionId2
= EFI_QUESTION_ID_INVALID
;
1404 VOID
SetQuestionId1 (
1405 IN EFI_QUESTION_ID QuestionId
,
1409 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1410 mEqIdId
->QuestionId1
= QuestionId
;
1412 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId1
), sizeof (EFI_QUESTION_ID
), LineNo
);
1416 VOID
SetQuestionId2 (
1417 IN EFI_QUESTION_ID QuestionId
,
1421 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1422 mEqIdId
->QuestionId2
= QuestionId
;
1424 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId2
), sizeof (EFI_QUESTION_ID
), LineNo
);
1429 class CIfrEqIdVal
: public CIfrObj
, public CIfrOpHeader
{
1431 EFI_IFR_EQ_ID_VAL
*mEqIdVal
;
1436 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP
, (CHAR8
**)&mEqIdVal
),
1437 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP
, &mEqIdVal
->Header
) {
1439 mEqIdVal
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1442 VOID
SetQuestionId (
1443 IN EFI_QUESTION_ID QuestionId
,
1447 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1448 mEqIdVal
->QuestionId
= QuestionId
;
1450 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVal
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1454 VOID
SetValue (IN UINT16 Value
) {
1455 mEqIdVal
->Value
= Value
;
1459 class CIfrEqIdList
: public CIfrObj
, public CIfrOpHeader
{
1461 EFI_IFR_EQ_ID_LIST
*mEqIdVList
;
1466 ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP
, (CHAR8
**)&mEqIdVList
, sizeof (EFI_IFR_EQ_ID_LIST
), TRUE
),
1467 CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP
, &mEqIdVList
->Header
) {
1469 mEqIdVList
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1470 mEqIdVList
->ListLength
= 0;
1471 mEqIdVList
->ValueList
[0] = 0;
1474 VOID
SetQuestionId (
1475 IN EFI_QUESTION_ID QuestionId
,
1479 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1480 mEqIdVList
->QuestionId
= QuestionId
;
1482 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVList
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1486 VOID
SetListLength (IN UINT16 ListLength
) {
1487 mEqIdVList
->ListLength
= ListLength
;
1490 VOID
SetValueList (IN UINT16 Index
, IN UINT16 Value
) {
1492 mEqIdVList
->ValueList
[0] = Value
;
1496 if (ExpendObjBin (sizeof (UINT16
)) ==TRUE
) {
1497 IncLength (sizeof (UINT16
));
1498 mEqIdVList
->ValueList
[Index
] = Value
;
1503 class CIfrQuestionRef1
: public CIfrObj
, public CIfrOpHeader
{
1505 EFI_IFR_QUESTION_REF1
*mQuestionRef1
;
1510 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP
, (CHAR8
**)&mQuestionRef1
),
1511 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP
, &mQuestionRef1
->Header
) {
1513 mQuestionRef1
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1516 VOID
SetQuestionId (
1517 IN EFI_QUESTION_ID QuestionId
,
1521 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1522 mQuestionRef1
->QuestionId
= QuestionId
;
1524 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mQuestionRef1
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1529 class CIfrQuestionRef2
: public CIfrObj
, public CIfrOpHeader
{
1531 EFI_IFR_QUESTION_REF2
*mQuestionRef2
;
1536 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP
, (CHAR8
**)&mQuestionRef2
),
1537 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP
, &mQuestionRef2
->Header
) {
1542 class CIfrQuestionRef3
: public CIfrObj
, public CIfrOpHeader
{
1544 EFI_IFR_QUESTION_REF3
*mQuestionRef3
;
1549 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3
),
1550 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3
->Header
) {
1555 class CIfrQuestionRef3_2
: public CIfrObj
, public CIfrOpHeader
{
1557 EFI_IFR_QUESTION_REF3_2
*mQuestionRef3_2
;
1560 CIfrQuestionRef3_2 (
1562 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_2
, sizeof (EFI_IFR_QUESTION_REF3_2
)),
1563 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_2
->Header
, sizeof (EFI_IFR_QUESTION_REF3_2
)) {
1565 mQuestionRef3_2
->DevicePath
= EFI_STRING_ID_INVALID
;
1568 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1569 mQuestionRef3_2
->DevicePath
= DevicePath
;
1573 class CIfrQuestionRef3_3
: public CIfrObj
, public CIfrOpHeader
{
1575 EFI_IFR_QUESTION_REF3_3
*mQuestionRef3_3
;
1578 CIfrQuestionRef3_3 (
1580 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_3
, sizeof (EFI_IFR_QUESTION_REF3_3
)),
1581 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_3
->Header
, sizeof (EFI_IFR_QUESTION_REF3_3
)) {
1583 mQuestionRef3_3
->DevicePath
= EFI_STRING_ID_INVALID
;
1584 memset (&mQuestionRef3_3
->Guid
, 0, sizeof (EFI_GUID
));
1587 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1588 mQuestionRef3_3
->DevicePath
= DevicePath
;
1591 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1592 mQuestionRef3_3
->Guid
= *Guid
;
1596 class CIfrRuleRef
: public CIfrObj
, public CIfrOpHeader
{
1598 EFI_IFR_RULE_REF
*mRuleRef
;
1603 ) : CIfrObj (EFI_IFR_RULE_REF_OP
, (CHAR8
**)&mRuleRef
),
1604 CIfrOpHeader (EFI_IFR_RULE_REF_OP
, &mRuleRef
->Header
) {
1606 mRuleRef
->RuleId
= EFI_RULE_ID_INVALID
;
1609 VOID
SetRuleId (IN UINT8 RuleId
) {
1610 mRuleRef
->RuleId
= RuleId
;
1614 class CIfrStringRef1
: public CIfrObj
, public CIfrOpHeader
{
1616 EFI_IFR_STRING_REF1
*mStringRef1
;
1621 ) : CIfrObj (EFI_IFR_STRING_REF1_OP
, (CHAR8
**)&mStringRef1
),
1622 CIfrOpHeader (EFI_IFR_STRING_REF1_OP
, &mStringRef1
->Header
) {
1624 mStringRef1
->StringId
= EFI_STRING_ID_INVALID
;
1627 VOID
SetStringId (IN EFI_STRING_ID StringId
) {
1628 mStringRef1
->StringId
= StringId
;
1632 class CIfrStringRef2
: public CIfrObj
, public CIfrOpHeader
{
1634 EFI_IFR_STRING_REF2
*mStringRef2
;
1639 ) : CIfrObj (EFI_IFR_STRING_REF2_OP
, (CHAR8
**)&mStringRef2
),
1640 CIfrOpHeader (EFI_IFR_STRING_REF2_OP
, &mStringRef2
->Header
) {
1645 class CIfrThis
: public CIfrObj
, public CIfrOpHeader
{
1647 EFI_IFR_THIS
*mThis
;
1652 ) : CIfrObj (EFI_IFR_THIS_OP
, (CHAR8
**)&mThis
),
1653 CIfrOpHeader (EFI_IFR_THIS_OP
, &mThis
->Header
) {
1658 class CIfrUint8
: public CIfrObj
, public CIfrOpHeader
{
1660 EFI_IFR_UINT8
*mUint8
;
1665 ) : CIfrObj (EFI_IFR_UINT8_OP
, (CHAR8
**)&mUint8
),
1666 CIfrOpHeader (EFI_IFR_UINT8_OP
, &mUint8
->Header
) {
1670 VOID
SetValue (IN UINT8 Value
) {
1671 mUint8
->Value
= Value
;
1675 class CIfrUint16
: public CIfrObj
, public CIfrOpHeader
{
1677 EFI_IFR_UINT16
*mUint16
;
1682 ) : CIfrObj (EFI_IFR_UINT16_OP
, (CHAR8
**)&mUint16
),
1683 CIfrOpHeader (EFI_IFR_UINT16_OP
, &mUint16
->Header
) {
1687 VOID
SetValue (IN UINT16 Value
) {
1688 mUint16
->Value
= Value
;
1692 class CIfrUint32
: public CIfrObj
, public CIfrOpHeader
{
1694 EFI_IFR_UINT32
*mUint32
;
1699 ) : CIfrObj (EFI_IFR_UINT32_OP
, (CHAR8
**)&mUint32
),
1700 CIfrOpHeader (EFI_IFR_UINT32_OP
, &mUint32
->Header
) {
1704 VOID
SetValue (IN UINT32 Value
) {
1705 mUint32
->Value
= Value
;
1709 class CIfrUint64
: public CIfrObj
, public CIfrOpHeader
{
1711 EFI_IFR_UINT64
*mUint64
;
1716 ) : CIfrObj (EFI_IFR_UINT64_OP
, (CHAR8
**)&mUint64
),
1717 CIfrOpHeader (EFI_IFR_UINT64_OP
, &mUint64
->Header
) {
1721 VOID
SetValue (IN UINT64 Value
) {
1722 mUint64
->Value
= Value
;
1726 class CIfrTrue
: public CIfrObj
, public CIfrOpHeader
{
1728 EFI_IFR_TRUE
*mTrue
;
1733 ) : CIfrObj (EFI_IFR_TRUE_OP
, (CHAR8
**)&mTrue
),
1734 CIfrOpHeader (EFI_IFR_TRUE_OP
, &mTrue
->Header
) {
1739 class CIfrFalse
: public CIfrObj
, public CIfrOpHeader
{
1741 EFI_IFR_FALSE
*mFalse
;
1746 ) : CIfrObj (EFI_IFR_FALSE_OP
, (CHAR8
**)&mFalse
),
1747 CIfrOpHeader (EFI_IFR_FALSE_OP
, &mFalse
->Header
) {
1752 class CIfrOne
: public CIfrObj
, public CIfrOpHeader
{
1759 ) : CIfrObj (EFI_IFR_ONE_OP
, (CHAR8
**)&mOne
),
1760 CIfrOpHeader (EFI_IFR_ONE_OP
, &mOne
->Header
) {
1765 class CIfrOnes
: public CIfrObj
, public CIfrOpHeader
{
1767 EFI_IFR_ONES
*mOnes
;
1772 ) : CIfrObj (EFI_IFR_ONES_OP
, (CHAR8
**)&mOnes
),
1773 CIfrOpHeader (EFI_IFR_ONES_OP
, &mOnes
->Header
) {
1778 class CIfrZero
: public CIfrObj
, public CIfrOpHeader
{
1780 EFI_IFR_ZERO
*mZero
;
1785 ) : CIfrObj (EFI_IFR_ZERO_OP
, (CHAR8
**)&mZero
),
1786 CIfrOpHeader (EFI_IFR_ZERO_OP
, &mZero
->Header
) {
1791 class CIfrUndefined
: public CIfrObj
, public CIfrOpHeader
{
1793 EFI_IFR_UNDEFINED
*mUndefined
;
1798 ) : CIfrObj (EFI_IFR_UNDEFINED_OP
, (CHAR8
**)&mUndefined
),
1799 CIfrOpHeader (EFI_IFR_UNDEFINED_OP
, &mUndefined
->Header
) {
1804 class CIfrVersion
: public CIfrObj
, public CIfrOpHeader
{
1806 EFI_IFR_VERSION
*mVersion
;
1811 ) : CIfrObj (EFI_IFR_VERSION_OP
, (CHAR8
**)&mVersion
),
1812 CIfrOpHeader (EFI_IFR_VERSION_OP
, &mVersion
->Header
) {
1817 class CIfrLength
: public CIfrObj
, public CIfrOpHeader
{
1819 EFI_IFR_LENGTH
*mLength
;
1824 ) : CIfrObj (EFI_IFR_LENGTH_OP
, (CHAR8
**)&mLength
),
1825 CIfrOpHeader (EFI_IFR_LENGTH_OP
, &mLength
->Header
) {
1830 class CIfrNot
: public CIfrObj
, public CIfrOpHeader
{
1837 ) : CIfrObj (EFI_IFR_NOT_OP
, (CHAR8
**)&mNot
),
1838 CIfrOpHeader (EFI_IFR_NOT_OP
, &mNot
->Header
) {
1843 class CIfrBitWiseNot
: public CIfrObj
, public CIfrOpHeader
{
1845 EFI_IFR_BITWISE_NOT
*mBitWise
;
1850 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP
, (CHAR8
**)&mBitWise
),
1851 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP
, &mBitWise
->Header
) {
1856 class CIfrToBoolean
: public CIfrObj
, public CIfrOpHeader
{
1858 EFI_IFR_TO_BOOLEAN
*mToBoolean
;
1863 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP
, (CHAR8
**)&mToBoolean
),
1864 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP
, &mToBoolean
->Header
) {
1869 class CIfrToString
: public CIfrObj
, public CIfrOpHeader
{
1871 EFI_IFR_TO_STRING
*mToString
;
1876 ) : CIfrObj (EFI_IFR_TO_STRING_OP
, (CHAR8
**)&mToString
),
1877 CIfrOpHeader (EFI_IFR_TO_STRING_OP
, &mToString
->Header
) {
1881 VOID
SetFormat (IN UINT8 Format
) {
1882 mToString
->Format
= Format
;
1886 class CIfrToUint
: public CIfrObj
, public CIfrOpHeader
{
1888 EFI_IFR_TO_UINT
*mToUint
;
1893 ) : CIfrObj (EFI_IFR_TO_UINT_OP
, (CHAR8
**)&mToUint
),
1894 CIfrOpHeader (EFI_IFR_TO_UINT_OP
, &mToUint
->Header
) {
1899 class CIfrToUpper
: public CIfrObj
, public CIfrOpHeader
{
1901 EFI_IFR_TO_UPPER
*mToUpper
;
1906 ) : CIfrObj (EFI_IFR_TO_UPPER_OP
, (CHAR8
**)&mToUpper
),
1907 CIfrOpHeader (EFI_IFR_TO_UPPER_OP
, &mToUpper
->Header
) {
1912 class CIfrToLower
: public CIfrObj
, public CIfrOpHeader
{
1914 EFI_IFR_TO_LOWER
*mToLower
;
1919 ) : CIfrObj (EFI_IFR_TO_LOWER_OP
, (CHAR8
**)&mToLower
),
1920 CIfrOpHeader (EFI_IFR_TO_LOWER_OP
, &mToLower
->Header
) {
1925 class CIfrAdd
: public CIfrObj
, public CIfrOpHeader
{
1932 ) : CIfrObj (EFI_IFR_ADD_OP
, (CHAR8
**)&mAdd
),
1933 CIfrOpHeader (EFI_IFR_ADD_OP
, &mAdd
->Header
) {
1938 class CIfrBitWiseAnd
: public CIfrObj
, public CIfrOpHeader
{
1940 EFI_IFR_BITWISE_AND
*mBitWiseAnd
;
1945 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP
, (CHAR8
**)&mBitWiseAnd
),
1946 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP
, &mBitWiseAnd
->Header
) {
1951 class CIfrBitWiseOr
: public CIfrObj
, public CIfrOpHeader
{
1953 EFI_IFR_BITWISE_OR
*mBitWiseOr
;
1958 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP
, (CHAR8
**)&mBitWiseOr
),
1959 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP
, &mBitWiseOr
->Header
) {
1964 class CIfrAnd
: public CIfrObj
, public CIfrOpHeader
{
1971 ) : CIfrObj (EFI_IFR_AND_OP
, (CHAR8
**)&mAnd
),
1972 CIfrOpHeader (EFI_IFR_AND_OP
, &mAnd
->Header
) {
1977 class CIfrCatenate
: public CIfrObj
, public CIfrOpHeader
{
1979 EFI_IFR_CATENATE
*mCatenate
;
1984 ) : CIfrObj (EFI_IFR_CATENATE_OP
, (CHAR8
**)&mCatenate
),
1985 CIfrOpHeader (EFI_IFR_CATENATE_OP
, &mCatenate
->Header
) {
1990 class CIfrDivide
: public CIfrObj
, public CIfrOpHeader
{
1992 EFI_IFR_DIVIDE
*mDivide
;
1997 ) : CIfrObj (EFI_IFR_DIVIDE_OP
, (CHAR8
**)&mDivide
),
1998 CIfrOpHeader (EFI_IFR_DIVIDE_OP
, &mDivide
->Header
) {
2003 class CIfrEqual
: public CIfrObj
, public CIfrOpHeader
{
2005 EFI_IFR_EQUAL
*mEqual
;
2010 ) : CIfrObj (EFI_IFR_EQUAL_OP
, (CHAR8
**)&mEqual
),
2011 CIfrOpHeader (EFI_IFR_EQUAL_OP
, &mEqual
->Header
) {
2016 class CIfrGreaterEqual
: public CIfrObj
, public CIfrOpHeader
{
2018 EFI_IFR_GREATER_EQUAL
*mGreaterEqual
;
2023 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP
, (CHAR8
**)&mGreaterEqual
),
2024 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP
, &mGreaterEqual
->Header
) {
2029 class CIfrGreaterThan
: public CIfrObj
, public CIfrOpHeader
{
2031 EFI_IFR_GREATER_THAN
*mGreaterThan
;
2036 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP
, (CHAR8
**)&mGreaterThan
),
2037 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP
, &mGreaterThan
->Header
) {
2042 class CIfrLessEqual
: public CIfrObj
, public CIfrOpHeader
{
2044 EFI_IFR_LESS_EQUAL
*mLessEqual
;
2049 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP
, (CHAR8
**)&mLessEqual
),
2050 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP
, &mLessEqual
->Header
) {
2055 class CIfrLessThan
: public CIfrObj
, public CIfrOpHeader
{
2057 EFI_IFR_LESS_THAN
*mLessThan
;
2062 ) : CIfrObj (EFI_IFR_LESS_THAN_OP
, (CHAR8
**)&mLessThan
),
2063 CIfrOpHeader (EFI_IFR_LESS_THAN_OP
, &mLessThan
->Header
) {
2068 class CIfrMatch
: public CIfrObj
, public CIfrOpHeader
{
2070 EFI_IFR_MATCH
*mMatch
;
2075 ) : CIfrObj (EFI_IFR_MATCH_OP
, (CHAR8
**)&mMatch
),
2076 CIfrOpHeader (EFI_IFR_MATCH_OP
, &mMatch
->Header
) {
2081 class CIfrMultiply
: public CIfrObj
, public CIfrOpHeader
{
2083 EFI_IFR_MULTIPLY
*mMultiply
;
2088 ) : CIfrObj (EFI_IFR_MULTIPLY_OP
, (CHAR8
**)&mMultiply
),
2089 CIfrOpHeader (EFI_IFR_MULTIPLY_OP
, &mMultiply
->Header
) {
2094 class CIfrModulo
: public CIfrObj
, public CIfrOpHeader
{
2096 EFI_IFR_MODULO
*mModulo
;
2101 ) : CIfrObj (EFI_IFR_MODULO_OP
, (CHAR8
**)&mModulo
),
2102 CIfrOpHeader (EFI_IFR_MODULO_OP
, &mModulo
->Header
) {
2107 class CIfrNotEqual
: public CIfrObj
, public CIfrOpHeader
{
2109 EFI_IFR_NOT_EQUAL
*mNotEqual
;
2114 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP
, (CHAR8
**)&mNotEqual
),
2115 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP
, &mNotEqual
->Header
) {
2120 class CIfrOr
: public CIfrObj
, public CIfrOpHeader
{
2127 ) : CIfrObj (EFI_IFR_OR_OP
, (CHAR8
**)&mOr
),
2128 CIfrOpHeader (EFI_IFR_OR_OP
, &mOr
->Header
) {
2133 class CIfrShiftLeft
: public CIfrObj
, public CIfrOpHeader
{
2135 EFI_IFR_SHIFT_LEFT
*mShiftLeft
;
2140 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP
, (CHAR8
**)&mShiftLeft
),
2141 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP
, &mShiftLeft
->Header
) {
2146 class CIfrShiftRight
: public CIfrObj
, public CIfrOpHeader
{
2148 EFI_IFR_SHIFT_RIGHT
*mShiftRight
;
2153 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP
, (CHAR8
**)&mShiftRight
),
2154 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP
, &mShiftRight
->Header
) {
2159 class CIfrSubtract
: public CIfrObj
, public CIfrOpHeader
{
2161 EFI_IFR_SUBTRACT
*mSubtract
;
2166 ) : CIfrObj (EFI_IFR_SUBTRACT_OP
, (CHAR8
**)&mSubtract
),
2167 CIfrOpHeader (EFI_IFR_SUBTRACT_OP
, &mSubtract
->Header
) {
2172 class CIfrConditional
: public CIfrObj
, public CIfrOpHeader
{
2174 EFI_IFR_CONDITIONAL
*mConditional
;
2179 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP
, (CHAR8
**)&mConditional
),
2180 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP
, &mConditional
->Header
) {
2185 class CIfrFind
: public CIfrObj
, public CIfrOpHeader
{
2187 EFI_IFR_FIND
*mFind
;
2192 ) : CIfrObj (EFI_IFR_FIND_OP
, (CHAR8
**)&mFind
),
2193 CIfrOpHeader (EFI_IFR_FIND_OP
, &mFind
->Header
) {
2197 VOID
SetFormat (IN UINT8 Format
) {
2198 mFind
->Format
= Format
;
2202 class CIfrMid
: public CIfrObj
, public CIfrOpHeader
{
2209 ) : CIfrObj (EFI_IFR_MID_OP
, (CHAR8
**)&mMid
),
2210 CIfrOpHeader (EFI_IFR_MID_OP
, &mMid
->Header
) {
2215 class CIfrToken
: public CIfrObj
, public CIfrOpHeader
{
2217 EFI_IFR_TOKEN
*mToken
;
2222 ) : CIfrObj (EFI_IFR_TOKEN_OP
, (CHAR8
**)&mToken
),
2223 CIfrOpHeader (EFI_IFR_TOKEN_OP
, &mToken
->Header
) {
2228 class CIfrSpan
: public CIfrObj
, public CIfrOpHeader
{
2230 EFI_IFR_SPAN
*mSpan
;
2235 ) : CIfrObj (EFI_IFR_SPAN_OP
, (CHAR8
**)&mSpan
),
2236 CIfrOpHeader (EFI_IFR_SPAN_OP
, &mSpan
->Header
) {
2238 mSpan
->Flags
= EFI_IFR_FLAGS_FIRST_MATCHING
;
2241 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
2242 if (_IS_EQUAL (LFlags
, EFI_IFR_FLAGS_FIRST_MATCHING
)) {
2243 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_MATCHING
;
2244 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_FIRST_NON_MATCHING
)) {
2245 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_NON_MATCHING
;
2248 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;