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
;
100 BOOLEAN CompatibleMode
;
101 EFI_GUID
*OverrideClassGuid
;
102 } INPUT_INFO_TO_SYNTAX
;
107 SBufferNode
*mBufferNodeQueueHead
;
108 SBufferNode
*mBufferNodeQueueTail
;
109 SBufferNode
*mCurrBufferNode
;
111 SBufferNode
*mReadBufferNode
;
112 UINT32 mReadBufferOffset
;
116 VOID
_WRITE_PKG_LINE (IN
FILE *, IN UINT32
, IN CONST CHAR8
*, IN CHAR8
*, IN UINT32
);
117 VOID
_WRITE_PKG_END (IN
FILE *, IN UINT32
, IN CONST CHAR8
*, IN CHAR8
*, IN UINT32
);
120 SPendingAssign
*PendingAssignList
;
123 CFormPkg (IN UINT32 BufferSize
);
126 CHAR8
* IfrBinBufferGet (IN UINT32
);
127 inline UINT32
GetPkgLength (VOID
);
130 UINT32
Read (IN CHAR8
*, IN UINT32
);
133 EFI_VFR_RETURN_CODE
BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER
**);
134 EFI_VFR_RETURN_CODE
BuildPkg (IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
135 EFI_VFR_RETURN_CODE
BuildPkg (OUT PACKAGE_DATA
&);
136 EFI_VFR_RETURN_CODE
GenCFile (IN CHAR8
*, IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
139 EFI_VFR_RETURN_CODE
AssignPending (IN CHAR8
*, IN VOID
*, IN UINT32
, IN UINT32
, IN CONST CHAR8
*Msg
= NULL
);
140 VOID
DoPendingAssign (IN CHAR8
*, IN VOID
*, IN UINT32
);
141 bool HavePendingUnassigned (VOID
);
142 VOID
PendingAssignPrintAll (VOID
);
143 EFI_VFR_RETURN_CODE
DeclarePendingQuestion (
144 IN CVfrVarDataTypeDB
&lCVfrVarDataTypeDB
,
145 IN CVfrDataStorage
&lCVfrDataStorage
,
146 IN CVfrQuestionDB
&lCVfrQuestionDB
,
147 IN EFI_GUID
*LocalFormSetGuid
,
152 extern CFormPkg gCFormPkg
;
153 extern CVfrStringDB gCVfrStringDB
;
166 #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
167 #define EFI_IFR_RECORDINFO_IDX_START 0x0
169 class CIfrRecordInfoDB
{
173 SIfrRecord
*mIfrRecordListHead
;
174 SIfrRecord
*mIfrRecordListTail
;
176 SIfrRecord
* GetRecordInfoFromIdx (IN UINT32
);
177 BOOLEAN
CheckQuestionOpCode (IN UINT8
);
178 BOOLEAN
CheckIdOpCode (IN UINT8
);
179 EFI_QUESTION_ID
GetOpcodeQuestionId (IN EFI_IFR_OP_HEADER
*);
181 CIfrRecordInfoDB (VOID
);
182 ~CIfrRecordInfoDB (VOID
);
184 inline VOID
TurnOn (VOID
) {
188 inline VOID
TurnOff (VOID
) {
192 UINT32
IfrRecordRegister (IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
193 VOID
IfrRecordInfoUpdate (IN UINT32
, IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
194 VOID
IfrRecordOutput (IN
FILE *, IN UINT32 LineNo
);
195 VOID
IfrRecordOutput (OUT PACKAGE_DATA
&);
196 EFI_VFR_RETURN_CODE
IfrRecordAdjust (VOID
);
199 extern CIfrRecordInfoDB gCIfrRecordInfoDB
;
202 * The definition of CIfrObj
204 extern BOOLEAN gCreateOp
;
217 CIfrObj (IN UINT8 OpCode
, OUT CHAR8
**IfrObj
= NULL
, IN UINT8 ObjBinLen
= 0, IN BOOLEAN DelayEmit
= FALSE
);
218 virtual ~CIfrObj(VOID
);
220 VOID
_EMIT_PENDING_OBJ (VOID
);
222 inline VOID
SetLineNo (IN UINT32 LineNo
) {
226 inline CHAR8
* GetObjBinAddr (VOID
) {
230 inline UINT8
GetObjBinLen (VOID
) {
234 inline bool ExpendObjBin (IN UINT8 Size
) {
235 if ((mDelayEmit
== TRUE
) && ((mObjBinLen
+ Size
) > mObjBinLen
)) {
236 mObjBinLen
= mObjBinLen
+ Size
;
243 inline bool ShrinkObjBin (IN UINT8 Size
) {
244 if ((mDelayEmit
== TRUE
) && (mObjBinLen
> Size
)) {
254 * The definition of CIfrOpHeader
258 EFI_IFR_OP_HEADER
*mHeader
;
261 CIfrOpHeader (IN UINT8 OpCode
, IN VOID
*StartAddr
, IN UINT8 Length
= 0);
262 CIfrOpHeader (IN CIfrOpHeader
&);
264 VOID
IncLength (UINT8 Size
) {
265 if ((mHeader
->Length
+ Size
) > mHeader
->Length
) {
266 mHeader
->Length
= mHeader
->Length
+ Size
;
270 VOID
DecLength (UINT8 Size
) {
271 if (mHeader
->Length
>= Size
) {
272 mHeader
->Length
-= Size
;
277 return mHeader
->Length
;
281 return mHeader
->Scope
;
284 VOID
SetScope (IN UINT8 Scope
) {
285 mHeader
->Scope
= Scope
;
288 VOID
UpdateHeader (IN EFI_IFR_OP_HEADER
*Header
) {
293 extern UINT8 gScopeCount
;
296 * The definition of CIfrStatementHeader
298 class CIfrStatementHeader
{
300 EFI_IFR_STATEMENT_HEADER
*mHeader
;
303 CIfrStatementHeader (
304 IN EFI_IFR_STATEMENT_HEADER
*StartAddr
305 ) : mHeader ((EFI_IFR_STATEMENT_HEADER
*)StartAddr
) {
307 mHeader
->Help
= EFI_STRING_ID_INVALID
;
308 mHeader
->Prompt
= EFI_STRING_ID_INVALID
;
311 EFI_IFR_STATEMENT_HEADER
*GetStatementHeader () {
315 VOID
SetPrompt (IN EFI_STRING_ID Prompt
) {
316 mHeader
->Prompt
= Prompt
;
319 VOID
SetHelp (IN EFI_STRING_ID Help
) {
320 mHeader
->Help
= Help
;
325 * The definition of CIfrQuestionHeader
327 #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
329 class CIfrQuestionHeader
: public CIfrStatementHeader
{
331 EFI_IFR_QUESTION_HEADER
*mHeader
;
333 EFI_IFR_STATEMENT_HEADER
* QH2SH (EFI_IFR_QUESTION_HEADER
*Qheader
) {
334 return &(Qheader
)->Header
;
338 EFI_QUESTION_ID
QUESTION_ID (VOID
) {
339 return mHeader
->QuestionId
;
342 EFI_VARSTORE_ID
VARSTORE_ID (VOID
) {
343 return mHeader
->VarStoreId
;
346 VOID
VARSTORE_INFO (OUT EFI_VARSTORE_INFO
*Info
) {
348 Info
->mVarStoreId
= mHeader
->VarStoreId
;
349 memcpy (&Info
->mVarStoreId
, &mHeader
->VarStoreInfo
, sizeof (Info
->mVarStoreId
));
354 return mHeader
->Flags
;
359 IN EFI_IFR_QUESTION_HEADER
*StartAddr
,
360 IN UINT8 Flags
= EFI_IFR_QUESTION_FLAG_DEFAULT
361 ) : CIfrStatementHeader (QH2SH(StartAddr
)) {
363 mHeader
->QuestionId
= EFI_QUESTION_ID_INVALID
;
364 mHeader
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
365 mHeader
->VarStoreInfo
.VarName
= EFI_STRING_ID_INVALID
;
366 mHeader
->VarStoreInfo
.VarOffset
= EFI_VAROFFSET_INVALID
;
367 mHeader
->Flags
= Flags
;
370 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
371 mHeader
->QuestionId
= QuestionId
;
374 VOID
SetVarStoreInfo (IN EFI_VARSTORE_INFO
*Info
) {
375 mHeader
->VarStoreId
= Info
->mVarStoreId
;
376 mHeader
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
377 mHeader
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
380 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 Flags
) {
381 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_READ_ONLY
)) {
382 mHeader
->Flags
|= EFI_IFR_FLAG_READ_ONLY
;
385 _FLAG_CLEAR (Flags
, 0x02);
387 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_CALLBACK
)) {
388 mHeader
->Flags
|= EFI_IFR_FLAG_CALLBACK
;
392 // ignore NVAccessFlag
394 _FLAG_CLEAR (Flags
, 0x08);
396 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RESET_REQUIRED
)) {
397 mHeader
->Flags
|= EFI_IFR_FLAG_RESET_REQUIRED
;
401 // Set LateCheck Flag to compatible for framework flag
402 // but it uses 0x20 as its flag, if in the future UEFI may take this flag
404 if (_FLAG_TEST_AND_CLEAR (Flags
, 0x20)) {
405 mHeader
->Flags
|= 0x20;
408 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_OPTIONS_ONLY
)) {
409 mHeader
->Flags
|= EFI_IFR_FLAG_OPTIONS_ONLY
;
412 return _FLAGS_ZERO (Flags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
417 * The definition of CIfrMinMaxStepData
419 class CIfrMinMaxStepData
{
421 MINMAXSTEP_DATA
*mMinMaxStepData
;
426 CIfrMinMaxStepData (MINMAXSTEP_DATA
*DataAddr
, BOOLEAN NumericOpcode
=FALSE
) : mMinMaxStepData (DataAddr
) {
427 mMinMaxStepData
->u64
.MinValue
= 0;
428 mMinMaxStepData
->u64
.MaxValue
= 0;
429 mMinMaxStepData
->u64
.Step
= 0;
431 IsNumeric
= NumericOpcode
;
434 VOID
SetMinMaxStepData (IN UINT64 MinValue
, IN UINT64 MaxValue
, IN UINT64 Step
) {
436 mMinMaxStepData
->u64
.MinValue
= MinValue
;
437 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
440 if (MinValue
< mMinMaxStepData
->u64
.MinValue
) {
441 mMinMaxStepData
->u64
.MinValue
= MinValue
;
443 if (MaxValue
> mMinMaxStepData
->u64
.MaxValue
) {
444 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
447 mMinMaxStepData
->u64
.Step
= Step
;
450 VOID
SetMinMaxStepData (IN UINT32 MinValue
, IN UINT32 MaxValue
, IN UINT32 Step
) {
452 mMinMaxStepData
->u32
.MinValue
= MinValue
;
453 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
456 if (MinValue
< mMinMaxStepData
->u32
.MinValue
) {
457 mMinMaxStepData
->u32
.MinValue
= MinValue
;
459 if (MaxValue
> mMinMaxStepData
->u32
.MaxValue
) {
460 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
463 mMinMaxStepData
->u32
.Step
= Step
;
466 VOID
SetMinMaxStepData (IN UINT16 MinValue
, IN UINT16 MaxValue
, IN UINT16 Step
) {
468 mMinMaxStepData
->u16
.MinValue
= MinValue
;
469 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
472 if (MinValue
< mMinMaxStepData
->u16
.MinValue
) {
473 mMinMaxStepData
->u16
.MinValue
= MinValue
;
475 if (MaxValue
> mMinMaxStepData
->u16
.MaxValue
) {
476 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
479 mMinMaxStepData
->u16
.Step
= Step
;
482 VOID
SetMinMaxStepData (IN UINT8 MinValue
, IN UINT8 MaxValue
, IN UINT8 Step
) {
484 mMinMaxStepData
->u8
.MinValue
= MinValue
;
485 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
488 if (MinValue
< mMinMaxStepData
->u8
.MinValue
) {
489 mMinMaxStepData
->u8
.MinValue
= MinValue
;
491 if (MaxValue
> mMinMaxStepData
->u8
.MaxValue
) {
492 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
495 mMinMaxStepData
->u8
.Step
= Step
;
498 UINT64
GetMinData (UINT8 VarType
) {
501 case EFI_IFR_TYPE_NUM_SIZE_64
:
502 MinValue
= mMinMaxStepData
->u64
.MinValue
;
504 case EFI_IFR_TYPE_NUM_SIZE_32
:
505 MinValue
= (UINT64
) mMinMaxStepData
->u32
.MinValue
;
507 case EFI_IFR_TYPE_NUM_SIZE_16
:
508 MinValue
= (UINT64
) mMinMaxStepData
->u16
.MinValue
;
510 case EFI_IFR_TYPE_NUM_SIZE_8
:
511 MinValue
= (UINT64
) mMinMaxStepData
->u8
.MinValue
;
519 UINT64
GetMaxData (UINT8 VarType
) {
522 case EFI_IFR_TYPE_NUM_SIZE_64
:
523 MaxValue
= mMinMaxStepData
->u64
.MaxValue
;
525 case EFI_IFR_TYPE_NUM_SIZE_32
:
526 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.MaxValue
;
528 case EFI_IFR_TYPE_NUM_SIZE_16
:
529 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.MaxValue
;
531 case EFI_IFR_TYPE_NUM_SIZE_8
:
532 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.MaxValue
;
540 UINT64
GetStepData (UINT8 VarType
) {
543 case EFI_IFR_TYPE_NUM_SIZE_64
:
544 MaxValue
= mMinMaxStepData
->u64
.Step
;
546 case EFI_IFR_TYPE_NUM_SIZE_32
:
547 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.Step
;
549 case EFI_IFR_TYPE_NUM_SIZE_16
:
550 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.Step
;
552 case EFI_IFR_TYPE_NUM_SIZE_8
:
553 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.Step
;
561 BOOLEAN
IsNumericOpcode () {
566 static CIfrQuestionHeader
*gCurrentQuestion
= NULL
;
567 static CIfrMinMaxStepData
*gCurrentMinMaxData
= NULL
;
570 * The definition of all of the UEFI IFR Objects
572 class CIfrFormSet
: public CIfrObj
, public CIfrOpHeader
{
574 EFI_IFR_FORM_SET
*mFormSet
;
575 EFI_GUID
*mClassGuid
;
578 CIfrFormSet (UINT8 Size
) : CIfrObj (EFI_IFR_FORM_SET_OP
, (CHAR8
**)&mFormSet
, Size
),
579 CIfrOpHeader (EFI_IFR_FORM_SET_OP
, &mFormSet
->Header
, Size
) {
580 mFormSet
->Help
= EFI_STRING_ID_INVALID
;
581 mFormSet
->FormSetTitle
= EFI_STRING_ID_INVALID
;
583 memset (&mFormSet
->Guid
, 0, sizeof (EFI_GUID
));
584 mClassGuid
= (EFI_GUID
*) (mFormSet
+ 1);
587 VOID
SetGuid (IN EFI_GUID
*Guid
) {
588 memcpy (&mFormSet
->Guid
, Guid
, sizeof (EFI_GUID
));
591 VOID
SetFormSetTitle (IN EFI_STRING_ID FormSetTitle
) {
592 mFormSet
->FormSetTitle
= FormSetTitle
;
595 VOID
SetHelp (IN EFI_STRING_ID Help
) {
596 mFormSet
->Help
= Help
;
599 VOID
SetClassGuid (IN EFI_GUID
*Guid
) {
600 memcpy (&(mClassGuid
[mFormSet
->Flags
++]), Guid
, sizeof (EFI_GUID
));
604 return mFormSet
->Flags
;
608 class CIfrEnd
: public CIfrObj
, public CIfrOpHeader
{
613 CIfrEnd () : CIfrObj (EFI_IFR_END_OP
, (CHAR8
**)&mEnd
),
614 CIfrOpHeader (EFI_IFR_END_OP
, &mEnd
->Header
) {}
617 class CIfrDefaultStore
: public CIfrObj
, public CIfrOpHeader
{
619 EFI_IFR_DEFAULTSTORE
*mDefaultStore
;
622 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP
, (CHAR8
**)&mDefaultStore
),
623 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP
, &mDefaultStore
->Header
) {
624 mDefaultStore
->DefaultId
= EFI_VARSTORE_ID_INVALID
;
625 mDefaultStore
->DefaultName
= EFI_STRING_ID_INVALID
;
628 VOID
SetDefaultName (IN EFI_STRING_ID DefaultName
) {
629 mDefaultStore
->DefaultName
= DefaultName
;
632 VOID
SetDefaultId (IN UINT16 DefaultId
) {
633 mDefaultStore
->DefaultId
= DefaultId
;
637 #define EFI_FORM_ID_MAX 0xFFFF
638 #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
642 STATIC UINT32 FormIdBitMap
[EFI_FREE_FORM_ID_BITMAP_SIZE
];
644 STATIC BOOLEAN
ChekFormIdFree (IN EFI_FORM_ID FormId
) {
645 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
646 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
648 return (FormIdBitMap
[Index
] & (0x80000000 >> Offset
)) == 0;
651 STATIC VOID
MarkFormIdUsed (IN EFI_FORM_ID FormId
) {
652 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
653 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
655 FormIdBitMap
[Index
] |= (0x80000000 >> Offset
);
659 class CIfrForm
: public CIfrObj
, public CIfrOpHeader
{
664 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP
, (CHAR8
**)&mForm
),
665 CIfrOpHeader (EFI_IFR_FORM_OP
, &mForm
->Header
) {
667 mForm
->FormTitle
= EFI_STRING_ID_INVALID
;
670 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
673 // FormId can't be 0.
675 return VFR_RETURN_INVALID_PARAMETER
;
677 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
678 return VFR_RETURN_FORMID_REDEFINED
;
680 mForm
->FormId
= FormId
;
681 CIfrFormId::MarkFormIdUsed (FormId
);
682 return VFR_RETURN_SUCCESS
;
685 VOID
SetFormTitle (IN EFI_STRING_ID FormTitle
) {
686 mForm
->FormTitle
= FormTitle
;
690 class CIfrFormMap
: public CIfrObj
, public CIfrOpHeader
{
692 EFI_IFR_FORM_MAP
*mFormMap
;
693 EFI_IFR_FORM_MAP_METHOD
*mMethodMap
;
696 CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP
, (CHAR8
**)&mFormMap
, sizeof (EFI_IFR_FORM_MAP
), TRUE
),
697 CIfrOpHeader (EFI_IFR_FORM_MAP_OP
, &mFormMap
->Header
) {
698 mFormMap
->FormId
= 0;
699 mMethodMap
= (EFI_IFR_FORM_MAP_METHOD
*) (mFormMap
+ 1);
702 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
705 // FormId can't be 0.
707 return VFR_RETURN_INVALID_PARAMETER
;
709 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
710 return VFR_RETURN_FORMID_REDEFINED
;
712 mFormMap
->FormId
= FormId
;
713 CIfrFormId::MarkFormIdUsed (FormId
);
714 return VFR_RETURN_SUCCESS
;
717 VOID
SetFormMapMethod (IN EFI_STRING_ID MethodTitle
, IN EFI_GUID
*MethodGuid
) {
718 if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD
))) {
719 IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD
));
721 mMethodMap
->MethodTitle
= MethodTitle
;
722 memcpy (&(mMethodMap
->MethodIdentifier
), MethodGuid
, sizeof (EFI_GUID
));
728 class CIfrVarStore
: public CIfrObj
, public CIfrOpHeader
{
730 EFI_IFR_VARSTORE
*mVarStore
;
733 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP
, (CHAR8
**)&mVarStore
, sizeof (EFI_IFR_VARSTORE
), TRUE
),
734 CIfrOpHeader (EFI_IFR_VARSTORE_OP
, &mVarStore
->Header
) {
735 mVarStore
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
737 memset (&mVarStore
->Guid
, 0, sizeof (EFI_GUID
));
738 mVarStore
->Name
[0] = '\0';
741 VOID
SetGuid (IN EFI_GUID
*Guid
) {
742 memcpy (&mVarStore
->Guid
, Guid
, sizeof (EFI_GUID
));
745 VOID
SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId
) {
746 mVarStore
->VarStoreId
= VarStoreId
;
749 VOID
SetSize (IN UINT16 Size
) {
750 mVarStore
->Size
= Size
;
753 VOID
SetName (IN CHAR8
*Name
) {
757 Len
= (UINT8
) strlen (Name
);
759 if (ExpendObjBin (Len
) == TRUE
) {
761 strcpy ((CHAR8
*)(mVarStore
->Name
), Name
);
768 class CIfrVarStoreEfi
: public CIfrObj
, public CIfrOpHeader
{
770 EFI_IFR_VARSTORE_EFI
*mVarStoreEfi
;
773 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP
, (CHAR8
**)&mVarStoreEfi
, sizeof (EFI_IFR_VARSTORE_EFI
), TRUE
),
774 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP
, &mVarStoreEfi
->Header
) {
775 mVarStoreEfi
->VarStoreId
= EFI_VAROFFSET_INVALID
;
776 mVarStoreEfi
->Size
= 0;
777 memset (&mVarStoreEfi
->Guid
, 0, sizeof (EFI_GUID
));
778 mVarStoreEfi
->Name
[0] = '\0';
781 VOID
SetGuid (IN EFI_GUID
*Guid
) {
782 memcpy (&mVarStoreEfi
->Guid
, Guid
, sizeof (EFI_GUID
));
785 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
786 mVarStoreEfi
->VarStoreId
= VarStoreId
;
789 VOID
SetAttributes (IN UINT32 Attributes
) {
790 mVarStoreEfi
->Attributes
= Attributes
;
792 VOID
SetSize (IN UINT16 Size
) {
793 mVarStoreEfi
->Size
= Size
;
796 VOID
SetName (IN CHAR8
*Name
) {
800 Len
= (UINT8
) strlen (Name
);
802 if (ExpendObjBin (Len
) == TRUE
) {
804 strcpy ((CHAR8
*)(mVarStoreEfi
->Name
), Name
);
810 VOID
SetBinaryLength (IN UINT16 Size
) {
813 Len
= sizeof (EFI_IFR_VARSTORE_EFI
);
815 ExpendObjBin(Size
- Len
);
816 IncLength(Size
- Len
);
818 ShrinkObjBin(Len
- Size
);
819 DecLength(Len
- Size
);
824 class CIfrVarStoreNameValue
: public CIfrObj
, public CIfrOpHeader
{
826 EFI_IFR_VARSTORE_NAME_VALUE
*mVarStoreNameValue
;
829 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP
, (CHAR8
**)&mVarStoreNameValue
),
830 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP
, &mVarStoreNameValue
->Header
) {
831 mVarStoreNameValue
->VarStoreId
= EFI_VAROFFSET_INVALID
;
832 memset (&mVarStoreNameValue
->Guid
, 0, sizeof (EFI_GUID
));
835 VOID
SetGuid (IN EFI_GUID
*Guid
) {
836 memcpy (&mVarStoreNameValue
->Guid
, Guid
, sizeof (EFI_GUID
));
839 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
840 mVarStoreNameValue
->VarStoreId
= VarStoreId
;
844 class CIfrImage
: public CIfrObj
, public CIfrOpHeader
{
846 EFI_IFR_IMAGE
*mImage
;
849 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP
, (CHAR8
**)&mImage
),
850 CIfrOpHeader (EFI_IFR_FORM_OP
, &mImage
->Header
) {
851 mImage
->Id
= EFI_IMAGE_ID_INVALID
;
854 VOID
SetImageId (IN EFI_IMAGE_ID ImageId
) {
855 mImage
->Id
= ImageId
;
859 class CIfrModal
: public CIfrObj
, public CIfrOpHeader
{
861 EFI_IFR_MODAL
*mModal
;
864 CIfrModal () : CIfrObj (EFI_IFR_MODAL_TAG_OP
, (CHAR8
**)&mModal
),
865 CIfrOpHeader (EFI_IFR_MODAL_TAG_OP
, &mModal
->Header
) {
870 class CIfrLocked
: public CIfrObj
, public CIfrOpHeader
{
872 EFI_IFR_LOCKED
*mLocked
;
875 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP
, (CHAR8
**)&mLocked
),
876 CIfrOpHeader (EFI_IFR_LOCKED_OP
, &mLocked
->Header
) {}
879 class CIfrRule
: public CIfrObj
, public CIfrOpHeader
{
884 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP
, (CHAR8
**)&mRule
),
885 mRule ((EFI_IFR_RULE
*)GetObjBinAddr()),
886 CIfrOpHeader (EFI_IFR_RULE_OP
, &mRule
->Header
) {
887 mRule
->RuleId
= EFI_RULE_ID_INVALID
;
890 VOID
SetRuleId (IN UINT8 RuleId
) {
891 mRule
->RuleId
= RuleId
;
895 static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue
= {0, };
897 class CIfrDefault
: public CIfrObj
, public CIfrOpHeader
{
899 EFI_IFR_DEFAULT
*mDefault
;
903 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
904 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
,
905 IN EFI_IFR_TYPE_VALUE Value
= gZeroEfiIfrTypeValue
906 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
),
907 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
) {
908 mDefault
->Type
= Type
;
909 mDefault
->Value
= Value
;
910 mDefault
->DefaultId
= DefaultId
;
913 VOID
SetDefaultId (IN UINT16 DefaultId
) {
914 mDefault
->DefaultId
= DefaultId
;
917 VOID
SetType (IN UINT8 Type
) {
918 mDefault
->Type
= Type
;
921 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
922 mDefault
->Value
= Value
;
926 class CIfrValue
: public CIfrObj
, public CIfrOpHeader
{
928 EFI_IFR_VALUE
*mValue
;
931 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP
, (CHAR8
**)&mValue
),
932 CIfrOpHeader (EFI_IFR_VALUE_OP
, &mValue
->Header
) {}
936 class CIfrRead
: public CIfrObj
, public CIfrOpHeader
{
941 CIfrRead () : CIfrObj (EFI_IFR_READ_OP
, (CHAR8
**)&mRead
),
942 CIfrOpHeader (EFI_IFR_READ_OP
, &mRead
->Header
) {}
946 class CIfrWrite
: public CIfrObj
, public CIfrOpHeader
{
948 EFI_IFR_WRITE
*mWrite
;
951 CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP
, (CHAR8
**)&mWrite
),
952 CIfrOpHeader (EFI_IFR_WRITE_OP
, &mWrite
->Header
) {}
956 class CIfrGet
: public CIfrObj
, public CIfrOpHeader
{
963 ) : CIfrObj (EFI_IFR_GET_OP
, (CHAR8
**)&mGet
),
964 CIfrOpHeader (EFI_IFR_GET_OP
, &mGet
->Header
) {
968 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
969 mGet
->VarStoreId
= Info
->mVarStoreId
;
970 mGet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
971 mGet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
972 mGet
->VarStoreType
= Info
->mVarType
;
976 class CIfrSet
: public CIfrObj
, public CIfrOpHeader
{
983 ) : CIfrObj (EFI_IFR_SET_OP
, (CHAR8
**)&mSet
),
984 CIfrOpHeader (EFI_IFR_SET_OP
, &mSet
->Header
) {
988 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
989 mSet
->VarStoreId
= Info
->mVarStoreId
;
990 mSet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
991 mSet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
992 mSet
->VarStoreType
= Info
->mVarType
;
996 class CIfrSubtitle
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
998 EFI_IFR_SUBTITLE
*mSubtitle
;
1001 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP
, (CHAR8
**)&mSubtitle
),
1002 CIfrOpHeader (EFI_IFR_SUBTITLE_OP
, &mSubtitle
->Header
),
1003 CIfrStatementHeader (&mSubtitle
->Statement
) {
1004 mSubtitle
->Flags
= 0;
1007 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1008 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_HORIZONTAL
)) {
1009 mSubtitle
->Flags
|= EFI_IFR_FLAGS_HORIZONTAL
;
1012 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1016 class CIfrText
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1018 EFI_IFR_TEXT
*mText
;
1021 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP
, (CHAR8
**)&mText
),
1022 CIfrOpHeader (EFI_IFR_TEXT_OP
, &mText
->Header
),
1023 CIfrStatementHeader (&mText
->Statement
) {
1024 mText
->TextTwo
= EFI_STRING_ID_INVALID
;
1027 VOID
SetTextTwo (IN EFI_STRING_ID StringId
) {
1028 mText
->TextTwo
= StringId
;
1032 class CIfrRef
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1037 CIfrRef () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef
),
1038 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef
->Header
),
1039 CIfrQuestionHeader (&mRef
->Question
) {
1043 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1044 mRef
->FormId
= FormId
;
1048 class CIfrRef2
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1050 EFI_IFR_REF2
*mRef2
;
1053 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef2
, sizeof (EFI_IFR_REF2
)),
1054 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef2
->Header
, sizeof (EFI_IFR_REF2
)),
1055 CIfrQuestionHeader (&mRef2
->Question
) {
1057 mRef2
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1060 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1061 mRef2
->FormId
= FormId
;
1064 EFI_VFR_RETURN_CODE
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1065 if (QuestionId
== EFI_QUESTION_ID_INVALID
) {
1066 return VFR_RETURN_UNDEFINED
;
1068 mRef2
->QuestionId
= QuestionId
;
1069 return VFR_RETURN_SUCCESS
;
1073 class CIfrRef3
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1075 EFI_IFR_REF3
*mRef3
;
1078 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef3
, sizeof(EFI_IFR_REF3
)),
1079 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef3
->Header
, sizeof (EFI_IFR_REF3
)),
1080 CIfrQuestionHeader (&mRef3
->Question
) {
1082 mRef3
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1083 memset (&mRef3
->FormSetId
, 0, sizeof (EFI_GUID
));
1086 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1087 mRef3
->FormId
= FormId
;
1090 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1091 mRef3
->QuestionId
= QuestionId
;
1094 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1095 mRef3
->FormSetId
= FormSetId
;
1099 class CIfrRef4
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1101 EFI_IFR_REF4
*mRef4
;
1104 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef4
, sizeof(EFI_IFR_REF4
)),
1105 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef4
->Header
, sizeof(EFI_IFR_REF4
)),
1106 CIfrQuestionHeader (&mRef4
->Question
) {
1108 mRef4
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1109 memset (&mRef4
->FormSetId
, 0, sizeof (EFI_GUID
));
1110 mRef4
->DevicePath
= EFI_STRING_ID_INVALID
;
1113 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1114 mRef4
->FormId
= FormId
;
1117 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1118 mRef4
->QuestionId
= QuestionId
;
1121 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1122 mRef4
->FormSetId
= FormSetId
;
1125 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1126 mRef4
->DevicePath
= DevicePath
;
1130 class CIfrRef5
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1132 EFI_IFR_REF5
*mRef5
;
1135 CIfrRef5 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef5
, sizeof (EFI_IFR_REF5
)),
1136 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef5
->Header
, sizeof (EFI_IFR_REF5
)),
1137 CIfrQuestionHeader (&mRef5
->Question
) {
1141 class CIfrResetButton
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1143 EFI_IFR_RESET_BUTTON
*mResetButton
;
1146 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP
, (CHAR8
**)&mResetButton
),
1147 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP
, &mResetButton
->Header
),
1148 CIfrStatementHeader (&mResetButton
->Statement
) {
1149 mResetButton
->DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
1152 VOID
SetDefaultId (IN UINT16 DefaultId
) {
1153 mResetButton
->DefaultId
= DefaultId
;
1157 class CIfrCheckBox
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1159 EFI_IFR_CHECKBOX
*mCheckBox
;
1162 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP
, (CHAR8
**)&mCheckBox
),
1163 CIfrOpHeader (EFI_IFR_CHECKBOX_OP
, &mCheckBox
->Header
),
1164 CIfrQuestionHeader (&mCheckBox
->Question
) {
1165 mCheckBox
->Flags
= 0;
1166 gCurrentQuestion
= this;
1170 gCurrentQuestion
= NULL
;
1173 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, UINT8 LFlags
) {
1174 EFI_VFR_RETURN_CODE Ret
;
1176 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1177 if (Ret
!= VFR_RETURN_SUCCESS
) {
1181 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT
)) {
1182 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT
;
1185 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT_MFG
)) {
1186 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT_MFG
;
1189 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1192 UINT8
GetFlags (VOID
) {
1193 return mCheckBox
->Flags
;
1197 class CIfrAction
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1199 EFI_IFR_ACTION
*mAction
;
1202 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP
, (CHAR8
**)&mAction
),
1203 CIfrOpHeader (EFI_IFR_ACTION_OP
, &mAction
->Header
),
1204 CIfrQuestionHeader (&mAction
->Question
) {
1205 mAction
->QuestionConfig
= EFI_STRING_ID_INVALID
;
1208 VOID
SetQuestionConfig (IN EFI_STRING_ID QuestionConfig
) {
1209 mAction
->QuestionConfig
= QuestionConfig
;
1213 class CIfrDate
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1215 EFI_IFR_DATE
*mDate
;
1218 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP
, (CHAR8
**)&mDate
),
1219 CIfrOpHeader (EFI_IFR_DATE_OP
, &mDate
->Header
),
1220 CIfrQuestionHeader (&mDate
->Question
) {
1224 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1225 EFI_VFR_RETURN_CODE Ret
;
1227 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1228 if (Ret
!= VFR_RETURN_SUCCESS
) {
1232 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_YEAR_SUPPRESS
)) {
1233 mDate
->Flags
|= EFI_QF_DATE_YEAR_SUPPRESS
;
1236 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_MONTH_SUPPRESS
)) {
1237 mDate
->Flags
|= EFI_QF_DATE_MONTH_SUPPRESS
;
1240 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_DAY_SUPPRESS
)) {
1241 mDate
->Flags
|= EFI_QF_DATE_DAY_SUPPRESS
;
1244 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_NORMAL
)) {
1245 mDate
->Flags
|= QF_DATE_STORAGE_NORMAL
;
1246 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_TIME
)) {
1247 mDate
->Flags
|= QF_DATE_STORAGE_TIME
;
1248 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_WAKEUP
)) {
1249 mDate
->Flags
|= QF_DATE_STORAGE_WAKEUP
;
1252 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1256 class CIfrNumeric
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1258 EFI_IFR_NUMERIC
*mNumeric
;
1261 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP
, (CHAR8
**)&mNumeric
),
1262 CIfrOpHeader (EFI_IFR_NUMERIC_OP
, &mNumeric
->Header
),
1263 CIfrQuestionHeader (&mNumeric
->Question
),
1264 CIfrMinMaxStepData (&mNumeric
->data
, TRUE
) {
1265 mNumeric
->Flags
= EFI_IFR_NUMERIC_SIZE_1
| EFI_IFR_DISPLAY_UINT_DEC
;
1266 gCurrentQuestion
= this;
1267 gCurrentMinMaxData
= this;
1271 gCurrentQuestion
= NULL
;
1272 gCurrentMinMaxData
= NULL
;
1275 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1276 EFI_VFR_RETURN_CODE Ret
;
1278 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1279 if (Ret
!= VFR_RETURN_SUCCESS
) {
1283 if (LFlags
& EFI_IFR_DISPLAY
) {
1284 mNumeric
->Flags
= LFlags
;
1286 mNumeric
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1288 return VFR_RETURN_SUCCESS
;
1292 class CIfrOneOf
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1294 EFI_IFR_ONE_OF
*mOneOf
;
1297 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP
, (CHAR8
**)&mOneOf
),
1298 CIfrOpHeader (EFI_IFR_ONE_OF_OP
, &mOneOf
->Header
),
1299 CIfrQuestionHeader (&mOneOf
->Question
),
1300 CIfrMinMaxStepData (&mOneOf
->data
) {
1302 gCurrentQuestion
= this;
1303 gCurrentMinMaxData
= this;
1307 gCurrentQuestion
= NULL
;
1308 gCurrentMinMaxData
= NULL
;
1311 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1312 EFI_VFR_RETURN_CODE Ret
;
1314 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1315 if (Ret
!= VFR_RETURN_SUCCESS
) {
1319 if (LFlags
& EFI_IFR_DISPLAY
) {
1320 mOneOf
->Flags
= LFlags
;
1322 mOneOf
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1324 return VFR_RETURN_SUCCESS
;
1328 class CIfrString
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1330 EFI_IFR_STRING
*mString
;
1333 CIfrString () : CIfrObj (EFI_IFR_STRING_OP
, (CHAR8
**)&mString
),
1334 CIfrOpHeader (EFI_IFR_STRING_OP
, &mString
->Header
),
1335 CIfrQuestionHeader (&mString
->Question
) {
1337 mString
->MinSize
= 0;
1338 mString
->MaxSize
= 0;
1339 gCurrentQuestion
= this;
1343 gCurrentQuestion
= NULL
;
1346 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1347 EFI_VFR_RETURN_CODE Ret
;
1349 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1350 if (Ret
!= VFR_RETURN_SUCCESS
) {
1354 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_STRING_MULTI_LINE
)) {
1355 mString
->Flags
|= EFI_IFR_STRING_MULTI_LINE
;
1358 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1361 VOID
SetMinSize (IN UINT8 Flags
) {
1362 mString
->MinSize
= Flags
;
1365 VOID
SetMaxSize (IN UINT8 MaxSize
) {
1366 mString
->MaxSize
= MaxSize
;
1370 class CIfrPassword
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1372 EFI_IFR_PASSWORD
*mPassword
;
1375 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP
, (CHAR8
**)&mPassword
),
1376 CIfrOpHeader (EFI_IFR_PASSWORD_OP
, &mPassword
->Header
),
1377 CIfrQuestionHeader (&mPassword
->Question
) {
1378 mPassword
->MinSize
= 0;
1379 mPassword
->MaxSize
= 0;
1380 gCurrentQuestion
= this;
1384 gCurrentQuestion
= NULL
;
1387 VOID
SetMinSize (IN UINT16 MinSize
) {
1388 mPassword
->MinSize
= MinSize
;
1391 VOID
SetMaxSize (IN UINT16 MaxSize
) {
1392 mPassword
->MaxSize
= MaxSize
;
1396 class CIfrOrderedList
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1398 EFI_IFR_ORDERED_LIST
*mOrderedList
;
1401 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP
, (CHAR8
**)&mOrderedList
),
1402 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP
, &mOrderedList
->Header
),
1403 CIfrQuestionHeader (&mOrderedList
->Question
) {
1404 mOrderedList
->MaxContainers
= 0;
1405 mOrderedList
->Flags
= 0;
1406 gCurrentQuestion
= this;
1409 ~CIfrOrderedList () {
1410 gCurrentQuestion
= NULL
;
1413 VOID
SetMaxContainers (IN UINT8 MaxContainers
) {
1414 mOrderedList
->MaxContainers
= MaxContainers
;
1417 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1418 EFI_VFR_RETURN_CODE Ret
;
1420 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1421 if (Ret
!= VFR_RETURN_SUCCESS
) {
1425 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_UNIQUE_SET
)) {
1426 mOrderedList
->Flags
|= EFI_IFR_UNIQUE_SET
;
1429 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_NO_EMPTY_SET
)) {
1430 mOrderedList
->Flags
|= EFI_IFR_NO_EMPTY_SET
;
1433 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1437 class CIfrTime
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1439 EFI_IFR_TIME
*mTime
;
1442 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP
, (CHAR8
**)&mTime
),
1443 CIfrOpHeader (EFI_IFR_TIME_OP
, &mTime
->Header
),
1444 CIfrQuestionHeader (&mTime
->Question
) {
1448 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1449 EFI_VFR_RETURN_CODE Ret
;
1451 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1452 if (Ret
!= VFR_RETURN_SUCCESS
) {
1456 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_HOUR_SUPPRESS
)) {
1457 mTime
->Flags
|= QF_TIME_HOUR_SUPPRESS
;
1460 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_MINUTE_SUPPRESS
)) {
1461 mTime
->Flags
|= QF_TIME_MINUTE_SUPPRESS
;
1464 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_SECOND_SUPPRESS
)) {
1465 mTime
->Flags
|= QF_TIME_SECOND_SUPPRESS
;
1468 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_NORMAL
)) {
1469 mTime
->Flags
|= QF_TIME_STORAGE_NORMAL
;
1470 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_TIME
)) {
1471 mTime
->Flags
|= QF_TIME_STORAGE_TIME
;
1472 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_WAKEUP
)) {
1473 mTime
->Flags
|= QF_TIME_STORAGE_WAKEUP
;
1476 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1480 class CIfrDisableIf
: public CIfrObj
, public CIfrOpHeader
{
1482 EFI_IFR_DISABLE_IF
*mDisableIf
;
1485 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP
, (CHAR8
**)&mDisableIf
),
1486 mDisableIf ((EFI_IFR_DISABLE_IF
*) GetObjBinAddr()),
1487 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP
, &mDisableIf
->Header
) {}
1490 class CIfrSuppressIf
: public CIfrObj
, public CIfrOpHeader
{
1492 EFI_IFR_SUPPRESS_IF
*mSuppressIf
;
1495 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP
, (CHAR8
**)&mSuppressIf
),
1496 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP
, &mSuppressIf
->Header
) {}
1499 class CIfrGrayOutIf
: public CIfrObj
, public CIfrOpHeader
{
1501 EFI_IFR_GRAY_OUT_IF
*mGrayOutIf
;
1504 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP
, (CHAR8
**)&mGrayOutIf
),
1505 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP
, &mGrayOutIf
->Header
) {}
1508 class CIfrInconsistentIf
: public CIfrObj
, public CIfrOpHeader
{
1510 EFI_IFR_INCONSISTENT_IF
*mInconsistentIf
;
1513 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP
, (CHAR8
**)&mInconsistentIf
),
1514 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP
, &mInconsistentIf
->Header
) {
1515 mInconsistentIf
->Error
= EFI_STRING_ID_INVALID
;
1518 VOID
SetError (IN EFI_STRING_ID Error
) {
1519 mInconsistentIf
->Error
= Error
;
1523 class CIfrNoSubmitIf
: public CIfrObj
, public CIfrOpHeader
{
1525 EFI_IFR_NO_SUBMIT_IF
*mNoSubmitIf
;
1528 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP
, (CHAR8
**)&mNoSubmitIf
),
1529 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP
, &mNoSubmitIf
->Header
) {
1530 mNoSubmitIf
->Error
= EFI_STRING_ID_INVALID
;
1533 VOID
SetError (IN EFI_STRING_ID Error
) {
1534 mNoSubmitIf
->Error
= Error
;
1538 class CIfrRefresh
: public CIfrObj
, public CIfrOpHeader
{
1540 EFI_IFR_REFRESH
*mRefresh
;
1543 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP
, (CHAR8
**)&mRefresh
),
1544 CIfrOpHeader (EFI_IFR_REFRESH_OP
, &mRefresh
->Header
) {
1545 mRefresh
->RefreshInterval
= 0;
1548 VOID
SetRefreshInterval (IN UINT8 RefreshInterval
) {
1549 mRefresh
->RefreshInterval
= RefreshInterval
;
1553 class CIfrRefreshId
: public CIfrObj
, public CIfrOpHeader
{
1555 EFI_IFR_REFRESH_ID
*mRefreshId
;
1558 CIfrRefreshId () : CIfrObj (EFI_IFR_REFRESH_ID_OP
, (CHAR8
**)&mRefreshId
),
1559 CIfrOpHeader (EFI_IFR_REFRESH_ID_OP
, &mRefreshId
->Header
) {
1560 memset (&mRefreshId
->RefreshEventGroupId
, 0, sizeof (EFI_GUID
));
1563 VOID
SetRefreshEventGroutId (IN EFI_GUID
*RefreshEventGroupId
) {
1564 memcpy (&mRefreshId
->RefreshEventGroupId
, RefreshEventGroupId
, sizeof (EFI_GUID
));
1568 class CIfrVarStoreDevice
: public CIfrObj
, public CIfrOpHeader
{
1570 EFI_IFR_VARSTORE_DEVICE
*mVarStoreDevice
;
1573 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP
, (CHAR8
**)&mVarStoreDevice
),
1574 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP
, &mVarStoreDevice
->Header
) {
1575 mVarStoreDevice
->DevicePath
= EFI_STRING_ID_INVALID
;
1578 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1579 mVarStoreDevice
->DevicePath
= DevicePath
;
1583 class CIfrOneOfOption
: public CIfrObj
, public CIfrOpHeader
{
1585 EFI_IFR_ONE_OF_OPTION
*mOneOfOption
;
1588 CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP
, (CHAR8
**)&mOneOfOption
),
1589 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP
, &mOneOfOption
->Header
) {
1590 mOneOfOption
->Flags
= 0;
1591 mOneOfOption
->Option
= EFI_STRING_ID_INVALID
;
1592 mOneOfOption
->Type
= EFI_IFR_TYPE_OTHER
;
1593 memset (&mOneOfOption
->Value
, 0, sizeof (mOneOfOption
->Value
));
1596 VOID
SetOption (IN EFI_STRING_ID Option
) {
1597 mOneOfOption
->Option
= Option
;
1600 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1601 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT
)) {
1602 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT
;
1605 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT_MFG
)) {
1606 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT_MFG
;
1609 if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
)) {
1610 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
);
1611 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_8
;
1612 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
)) {
1613 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
);
1614 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_16
;
1615 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
)) {
1616 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
);
1617 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_32
;
1618 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
)) {
1619 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
);
1620 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_64
;
1621 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_BOOLEAN
)) {
1622 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_BOOLEAN
);
1623 mOneOfOption
->Flags
|= EFI_IFR_TYPE_BOOLEAN
;
1624 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_TIME
)) {
1625 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_TIME
);
1626 mOneOfOption
->Flags
|= EFI_IFR_TYPE_TIME
;
1627 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_DATE
)) {
1628 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_DATE
);
1629 mOneOfOption
->Flags
|= EFI_IFR_TYPE_DATE
;
1630 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_STRING
)) {
1631 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_STRING
);
1632 mOneOfOption
->Flags
|= EFI_IFR_TYPE_STRING
;
1633 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_OTHER
)) {
1634 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_OTHER
);
1635 mOneOfOption
->Flags
|= EFI_IFR_TYPE_OTHER
;
1638 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1641 VOID
SetType (IN UINT8 Type
) {
1642 mOneOfOption
->Type
= Type
;
1645 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
1646 mOneOfOption
->Value
= Value
;
1649 UINT8
GetFlags (VOID
) {
1650 return mOneOfOption
->Flags
;
1654 static EFI_GUID IfrTianoGuid
= EFI_IFR_TIANO_GUID
;
1655 static EFI_GUID IfrFrameworkGuid
= EFI_IFR_FRAMEWORK_GUID
;
1657 class CIfrClass
: public CIfrObj
, public CIfrOpHeader
{
1659 EFI_IFR_GUID_CLASS
*mClass
;
1662 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mClass
, sizeof (EFI_IFR_GUID_CLASS
)),
1663 CIfrOpHeader (EFI_IFR_GUID_OP
, &mClass
->Header
, sizeof (EFI_IFR_GUID_CLASS
)) {
1664 mClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_CLASS
;
1665 mClass
->Guid
= IfrTianoGuid
;
1666 mClass
->Class
= EFI_NON_DEVICE_CLASS
;
1669 VOID
SetClass (IN UINT16 Class
) {
1670 mClass
->Class
= Class
;
1674 class CIfrSubClass
: public CIfrObj
, public CIfrOpHeader
{
1676 EFI_IFR_GUID_SUBCLASS
*mSubClass
;
1679 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mSubClass
, sizeof (EFI_IFR_GUID_SUBCLASS
)),
1680 CIfrOpHeader (EFI_IFR_GUID_OP
, &mSubClass
->Header
, sizeof (EFI_IFR_GUID_SUBCLASS
)) {
1681 mSubClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_SUBCLASS
;
1682 mSubClass
->Guid
= IfrTianoGuid
;
1683 mSubClass
->SubClass
= EFI_SETUP_APPLICATION_SUBCLASS
;
1686 VOID
SetSubClass (IN UINT16 SubClass
) {
1687 mSubClass
->SubClass
= SubClass
;
1691 class CIfrLabel
: public CIfrObj
, public CIfrOpHeader
{
1693 EFI_IFR_GUID_LABEL
*mLabel
;
1696 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mLabel
, sizeof (EFI_IFR_GUID_LABEL
)),
1697 CIfrOpHeader (EFI_IFR_GUID_OP
, &mLabel
->Header
, sizeof (EFI_IFR_GUID_LABEL
)) {
1698 mLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1699 mLabel
->Guid
= IfrTianoGuid
;
1702 VOID
SetNumber (IN UINT16 Number
) {
1703 mLabel
->Number
= Number
;
1707 class CIfrBanner
: public CIfrObj
, public CIfrOpHeader
{
1709 EFI_IFR_GUID_BANNER
*mBanner
;
1712 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mBanner
, sizeof (EFI_IFR_GUID_BANNER
)),
1713 CIfrOpHeader (EFI_IFR_GUID_OP
, &mBanner
->Header
, sizeof (EFI_IFR_GUID_BANNER
)) {
1714 mBanner
->ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
1715 mBanner
->Guid
= IfrTianoGuid
;
1718 VOID
SetTitle (IN EFI_STRING_ID StringId
) {
1719 mBanner
->Title
= StringId
;
1722 VOID
SetLine (IN UINT16 Line
) {
1723 mBanner
->LineNumber
= Line
;
1726 VOID
SetAlign (IN UINT8 Align
) {
1727 mBanner
->Alignment
= Align
;
1731 class CIfrOptionKey
: public CIfrObj
, public CIfrOpHeader
{
1733 EFI_IFR_GUID_OPTIONKEY
*mOptionKey
;
1737 IN EFI_QUESTION_ID QuestionId
,
1738 IN EFI_IFR_TYPE_VALUE
&OptionValue
,
1739 IN EFI_QUESTION_ID KeyValue
1740 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mOptionKey
, sizeof (EFI_IFR_GUID_OPTIONKEY
)),
1741 CIfrOpHeader (EFI_IFR_GUID_OP
, &mOptionKey
->Header
, sizeof (EFI_IFR_GUID_OPTIONKEY
)) {
1742 mOptionKey
->ExtendOpCode
= EFI_IFR_EXTEND_OP_OPTIONKEY
;
1743 mOptionKey
->Guid
= IfrFrameworkGuid
;
1744 mOptionKey
->QuestionId
= QuestionId
;
1745 mOptionKey
->OptionValue
= OptionValue
;
1746 mOptionKey
->KeyValue
= KeyValue
;
1750 class CIfrVarEqName
: public CIfrObj
, public CIfrOpHeader
{
1752 EFI_IFR_GUID_VAREQNAME
*mVarEqName
;
1756 IN EFI_QUESTION_ID QuestionId
,
1757 IN EFI_STRING_ID NameId
1758 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mVarEqName
, sizeof (EFI_IFR_GUID_VAREQNAME
)),
1759 CIfrOpHeader (EFI_IFR_GUID_OP
, &mVarEqName
->Header
, sizeof (EFI_IFR_GUID_VAREQNAME
)) {
1760 mVarEqName
->ExtendOpCode
= EFI_IFR_EXTEND_OP_VAREQNAME
;
1761 mVarEqName
->Guid
= IfrFrameworkGuid
;
1762 mVarEqName
->QuestionId
= QuestionId
;
1763 mVarEqName
->NameId
= NameId
;
1767 class CIfrTimeout
: public CIfrObj
, public CIfrOpHeader
{
1769 EFI_IFR_GUID_TIMEOUT
*mTimeout
;
1772 CIfrTimeout (IN UINT16 Timeout
= 0) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mTimeout
, sizeof (EFI_IFR_GUID_TIMEOUT
)),
1773 CIfrOpHeader (EFI_IFR_GUID_OP
, &mTimeout
->Header
, sizeof (EFI_IFR_GUID_TIMEOUT
)) {
1774 mTimeout
->ExtendOpCode
= EFI_IFR_EXTEND_OP_TIMEOUT
;
1775 mTimeout
->Guid
= IfrTianoGuid
;
1776 mTimeout
->TimeOut
= Timeout
;
1779 VOID
SetTimeout (IN UINT16 Timeout
) {
1780 mTimeout
->TimeOut
= Timeout
;
1784 class CIfrGuid
: public CIfrObj
, public CIfrOpHeader
{
1786 EFI_IFR_GUID
*mGuid
;
1789 CIfrGuid (UINT8 Size
) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mGuid
, sizeof (EFI_IFR_GUID
)+Size
),
1790 CIfrOpHeader (EFI_IFR_GUID_OP
, &mGuid
->Header
, sizeof (EFI_IFR_GUID
)+Size
) {
1791 memset (&mGuid
->Guid
, 0, sizeof (EFI_GUID
));
1794 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1795 memcpy (&mGuid
->Guid
, Guid
, sizeof (EFI_GUID
));
1798 VOID
SetData (IN UINT8
* DataBuff
, IN UINT8 Size
) {
1799 memcpy ((UINT8
*)mGuid
+ sizeof (EFI_IFR_GUID
), DataBuff
, Size
);
1803 class CIfrDup
: public CIfrObj
, public CIfrOpHeader
{
1810 ) : CIfrObj (EFI_IFR_DUP_OP
, (CHAR8
**)&mDup
),
1811 CIfrOpHeader (EFI_IFR_DUP_OP
, &mDup
->Header
) {
1816 class CIfrEqIdId
: public CIfrObj
, public CIfrOpHeader
{
1818 EFI_IFR_EQ_ID_ID
*mEqIdId
;
1823 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP
, (CHAR8
**)&mEqIdId
),
1824 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP
, &mEqIdId
->Header
) {
1826 mEqIdId
->QuestionId1
= EFI_QUESTION_ID_INVALID
;
1827 mEqIdId
->QuestionId2
= EFI_QUESTION_ID_INVALID
;
1830 VOID
SetQuestionId1 (
1831 IN EFI_QUESTION_ID QuestionId
,
1835 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1836 mEqIdId
->QuestionId1
= QuestionId
;
1838 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId1
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1842 VOID
SetQuestionId2 (
1843 IN EFI_QUESTION_ID QuestionId
,
1847 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1848 mEqIdId
->QuestionId2
= QuestionId
;
1850 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId2
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1855 class CIfrEqIdVal
: public CIfrObj
, public CIfrOpHeader
{
1857 EFI_IFR_EQ_ID_VAL
*mEqIdVal
;
1862 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP
, (CHAR8
**)&mEqIdVal
),
1863 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP
, &mEqIdVal
->Header
) {
1865 mEqIdVal
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1868 VOID
SetQuestionId (
1869 IN EFI_QUESTION_ID QuestionId
,
1873 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1874 mEqIdVal
->QuestionId
= QuestionId
;
1876 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVal
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1880 VOID
SetValue (IN UINT16 Value
) {
1881 mEqIdVal
->Value
= Value
;
1885 class CIfrEqIdList
: public CIfrObj
, public CIfrOpHeader
{
1887 EFI_IFR_EQ_ID_VAL_LIST
*mEqIdVList
;
1892 ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP
, (CHAR8
**)&mEqIdVList
, sizeof (EFI_IFR_EQ_ID_VAL_LIST
), TRUE
),
1893 CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP
, &mEqIdVList
->Header
) {
1895 mEqIdVList
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1896 mEqIdVList
->ListLength
= 0;
1897 mEqIdVList
->ValueList
[0] = 0;
1900 VOID
UpdateIfrBuffer (
1902 _EMIT_PENDING_OBJ();
1903 mEqIdVList
= (EFI_IFR_EQ_ID_VAL_LIST
*) GetObjBinAddr();
1904 UpdateHeader (&mEqIdVList
->Header
);
1907 VOID
SetQuestionId (
1908 IN EFI_QUESTION_ID QuestionId
,
1912 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1913 mEqIdVList
->QuestionId
= QuestionId
;
1915 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVList
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1919 VOID
SetListLength (IN UINT16 ListLength
) {
1920 mEqIdVList
->ListLength
= ListLength
;
1923 VOID
SetValueList (IN UINT16 Index
, IN UINT16 Value
) {
1925 mEqIdVList
->ValueList
[0] = Value
;
1929 if (ExpendObjBin (sizeof (UINT16
)) ==TRUE
) {
1930 IncLength (sizeof (UINT16
));
1931 mEqIdVList
->ValueList
[Index
] = Value
;
1936 class CIfrQuestionRef1
: public CIfrObj
, public CIfrOpHeader
{
1938 EFI_IFR_QUESTION_REF1
*mQuestionRef1
;
1943 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP
, (CHAR8
**)&mQuestionRef1
),
1944 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP
, &mQuestionRef1
->Header
) {
1946 mQuestionRef1
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1949 VOID
SetQuestionId (
1950 IN EFI_QUESTION_ID QuestionId
,
1954 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1955 mQuestionRef1
->QuestionId
= QuestionId
;
1957 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mQuestionRef1
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1962 class CIfrQuestionRef2
: public CIfrObj
, public CIfrOpHeader
{
1964 EFI_IFR_QUESTION_REF2
*mQuestionRef2
;
1969 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP
, (CHAR8
**)&mQuestionRef2
),
1970 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP
, &mQuestionRef2
->Header
) {
1975 class CIfrQuestionRef3
: public CIfrObj
, public CIfrOpHeader
{
1977 EFI_IFR_QUESTION_REF3
*mQuestionRef3
;
1982 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3
),
1983 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3
->Header
) {
1988 class CIfrQuestionRef3_2
: public CIfrObj
, public CIfrOpHeader
{
1990 EFI_IFR_QUESTION_REF3_2
*mQuestionRef3_2
;
1993 CIfrQuestionRef3_2 (
1995 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_2
, sizeof (EFI_IFR_QUESTION_REF3_2
)),
1996 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_2
->Header
, sizeof (EFI_IFR_QUESTION_REF3_2
)) {
1998 mQuestionRef3_2
->DevicePath
= EFI_STRING_ID_INVALID
;
2001 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
2002 mQuestionRef3_2
->DevicePath
= DevicePath
;
2006 class CIfrQuestionRef3_3
: public CIfrObj
, public CIfrOpHeader
{
2008 EFI_IFR_QUESTION_REF3_3
*mQuestionRef3_3
;
2011 CIfrQuestionRef3_3 (
2013 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_3
, sizeof (EFI_IFR_QUESTION_REF3_3
)),
2014 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_3
->Header
, sizeof (EFI_IFR_QUESTION_REF3_3
)) {
2016 mQuestionRef3_3
->DevicePath
= EFI_STRING_ID_INVALID
;
2017 memset (&mQuestionRef3_3
->Guid
, 0, sizeof (EFI_GUID
));
2020 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
2021 mQuestionRef3_3
->DevicePath
= DevicePath
;
2024 VOID
SetGuid (IN EFI_GUID
*Guid
) {
2025 mQuestionRef3_3
->Guid
= *Guid
;
2029 class CIfrRuleRef
: public CIfrObj
, public CIfrOpHeader
{
2031 EFI_IFR_RULE_REF
*mRuleRef
;
2036 ) : CIfrObj (EFI_IFR_RULE_REF_OP
, (CHAR8
**)&mRuleRef
),
2037 CIfrOpHeader (EFI_IFR_RULE_REF_OP
, &mRuleRef
->Header
) {
2039 mRuleRef
->RuleId
= EFI_RULE_ID_INVALID
;
2042 VOID
SetRuleId (IN UINT8 RuleId
) {
2043 mRuleRef
->RuleId
= RuleId
;
2047 class CIfrStringRef1
: public CIfrObj
, public CIfrOpHeader
{
2049 EFI_IFR_STRING_REF1
*mStringRef1
;
2054 ) : CIfrObj (EFI_IFR_STRING_REF1_OP
, (CHAR8
**)&mStringRef1
),
2055 CIfrOpHeader (EFI_IFR_STRING_REF1_OP
, &mStringRef1
->Header
) {
2057 mStringRef1
->StringId
= EFI_STRING_ID_INVALID
;
2060 VOID
SetStringId (IN EFI_STRING_ID StringId
) {
2061 mStringRef1
->StringId
= StringId
;
2065 class CIfrStringRef2
: public CIfrObj
, public CIfrOpHeader
{
2067 EFI_IFR_STRING_REF2
*mStringRef2
;
2072 ) : CIfrObj (EFI_IFR_STRING_REF2_OP
, (CHAR8
**)&mStringRef2
),
2073 CIfrOpHeader (EFI_IFR_STRING_REF2_OP
, &mStringRef2
->Header
) {
2078 class CIfrThis
: public CIfrObj
, public CIfrOpHeader
{
2080 EFI_IFR_THIS
*mThis
;
2085 ) : CIfrObj (EFI_IFR_THIS_OP
, (CHAR8
**)&mThis
),
2086 CIfrOpHeader (EFI_IFR_THIS_OP
, &mThis
->Header
) {
2091 class CIfrSecurity
: public CIfrObj
, public CIfrOpHeader
{
2093 EFI_IFR_SECURITY
*mSecurity
;
2098 ) : CIfrObj (EFI_IFR_SECURITY_OP
, (CHAR8
**)&mSecurity
),
2099 CIfrOpHeader (EFI_IFR_SECURITY_OP
, &mSecurity
->Header
) {
2101 memset (&mSecurity
->Permissions
, 0, sizeof (EFI_GUID
));
2104 VOID
SetPermissions (IN EFI_GUID
*Permissions
) {
2105 memcpy (&mSecurity
->Permissions
, Permissions
, sizeof (EFI_GUID
));
2109 class CIfrUint8
: public CIfrObj
, public CIfrOpHeader
{
2111 EFI_IFR_UINT8
*mUint8
;
2116 ) : CIfrObj (EFI_IFR_UINT8_OP
, (CHAR8
**)&mUint8
),
2117 CIfrOpHeader (EFI_IFR_UINT8_OP
, &mUint8
->Header
) {
2121 VOID
SetValue (IN UINT8 Value
) {
2122 mUint8
->Value
= Value
;
2126 class CIfrUint16
: public CIfrObj
, public CIfrOpHeader
{
2128 EFI_IFR_UINT16
*mUint16
;
2133 ) : CIfrObj (EFI_IFR_UINT16_OP
, (CHAR8
**)&mUint16
),
2134 CIfrOpHeader (EFI_IFR_UINT16_OP
, &mUint16
->Header
) {
2138 VOID
SetValue (IN UINT16 Value
) {
2139 mUint16
->Value
= Value
;
2143 class CIfrUint32
: public CIfrObj
, public CIfrOpHeader
{
2145 EFI_IFR_UINT32
*mUint32
;
2150 ) : CIfrObj (EFI_IFR_UINT32_OP
, (CHAR8
**)&mUint32
),
2151 CIfrOpHeader (EFI_IFR_UINT32_OP
, &mUint32
->Header
) {
2155 VOID
SetValue (IN UINT32 Value
) {
2156 mUint32
->Value
= Value
;
2160 class CIfrUint64
: public CIfrObj
, public CIfrOpHeader
{
2162 EFI_IFR_UINT64
*mUint64
;
2167 ) : CIfrObj (EFI_IFR_UINT64_OP
, (CHAR8
**)&mUint64
),
2168 CIfrOpHeader (EFI_IFR_UINT64_OP
, &mUint64
->Header
) {
2172 VOID
SetValue (IN UINT64 Value
) {
2173 mUint64
->Value
= Value
;
2177 class CIfrTrue
: public CIfrObj
, public CIfrOpHeader
{
2179 EFI_IFR_TRUE
*mTrue
;
2184 ) : CIfrObj (EFI_IFR_TRUE_OP
, (CHAR8
**)&mTrue
),
2185 CIfrOpHeader (EFI_IFR_TRUE_OP
, &mTrue
->Header
) {
2190 class CIfrFalse
: public CIfrObj
, public CIfrOpHeader
{
2192 EFI_IFR_FALSE
*mFalse
;
2197 ) : CIfrObj (EFI_IFR_FALSE_OP
, (CHAR8
**)&mFalse
),
2198 CIfrOpHeader (EFI_IFR_FALSE_OP
, &mFalse
->Header
) {
2203 class CIfrOne
: public CIfrObj
, public CIfrOpHeader
{
2210 ) : CIfrObj (EFI_IFR_ONE_OP
, (CHAR8
**)&mOne
),
2211 CIfrOpHeader (EFI_IFR_ONE_OP
, &mOne
->Header
) {
2216 class CIfrOnes
: public CIfrObj
, public CIfrOpHeader
{
2218 EFI_IFR_ONES
*mOnes
;
2223 ) : CIfrObj (EFI_IFR_ONES_OP
, (CHAR8
**)&mOnes
),
2224 CIfrOpHeader (EFI_IFR_ONES_OP
, &mOnes
->Header
) {
2229 class CIfrZero
: public CIfrObj
, public CIfrOpHeader
{
2231 EFI_IFR_ZERO
*mZero
;
2236 ) : CIfrObj (EFI_IFR_ZERO_OP
, (CHAR8
**)&mZero
),
2237 CIfrOpHeader (EFI_IFR_ZERO_OP
, &mZero
->Header
) {
2242 class CIfrUndefined
: public CIfrObj
, public CIfrOpHeader
{
2244 EFI_IFR_UNDEFINED
*mUndefined
;
2249 ) : CIfrObj (EFI_IFR_UNDEFINED_OP
, (CHAR8
**)&mUndefined
),
2250 CIfrOpHeader (EFI_IFR_UNDEFINED_OP
, &mUndefined
->Header
) {
2255 class CIfrVersion
: public CIfrObj
, public CIfrOpHeader
{
2257 EFI_IFR_VERSION
*mVersion
;
2262 ) : CIfrObj (EFI_IFR_VERSION_OP
, (CHAR8
**)&mVersion
),
2263 CIfrOpHeader (EFI_IFR_VERSION_OP
, &mVersion
->Header
) {
2268 class CIfrLength
: public CIfrObj
, public CIfrOpHeader
{
2270 EFI_IFR_LENGTH
*mLength
;
2275 ) : CIfrObj (EFI_IFR_LENGTH_OP
, (CHAR8
**)&mLength
),
2276 CIfrOpHeader (EFI_IFR_LENGTH_OP
, &mLength
->Header
) {
2281 class CIfrNot
: public CIfrObj
, public CIfrOpHeader
{
2288 ) : CIfrObj (EFI_IFR_NOT_OP
, (CHAR8
**)&mNot
),
2289 CIfrOpHeader (EFI_IFR_NOT_OP
, &mNot
->Header
) {
2294 class CIfrBitWiseNot
: public CIfrObj
, public CIfrOpHeader
{
2296 EFI_IFR_BITWISE_NOT
*mBitWise
;
2301 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP
, (CHAR8
**)&mBitWise
),
2302 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP
, &mBitWise
->Header
) {
2307 class CIfrToBoolean
: public CIfrObj
, public CIfrOpHeader
{
2309 EFI_IFR_TO_BOOLEAN
*mToBoolean
;
2314 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP
, (CHAR8
**)&mToBoolean
),
2315 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP
, &mToBoolean
->Header
) {
2320 class CIfrToString
: public CIfrObj
, public CIfrOpHeader
{
2322 EFI_IFR_TO_STRING
*mToString
;
2327 ) : CIfrObj (EFI_IFR_TO_STRING_OP
, (CHAR8
**)&mToString
),
2328 CIfrOpHeader (EFI_IFR_TO_STRING_OP
, &mToString
->Header
) {
2332 VOID
SetFormat (IN UINT8 Format
) {
2333 mToString
->Format
= Format
;
2337 class CIfrToUint
: public CIfrObj
, public CIfrOpHeader
{
2339 EFI_IFR_TO_UINT
*mToUint
;
2344 ) : CIfrObj (EFI_IFR_TO_UINT_OP
, (CHAR8
**)&mToUint
),
2345 CIfrOpHeader (EFI_IFR_TO_UINT_OP
, &mToUint
->Header
) {
2350 class CIfrToUpper
: public CIfrObj
, public CIfrOpHeader
{
2352 EFI_IFR_TO_UPPER
*mToUpper
;
2357 ) : CIfrObj (EFI_IFR_TO_UPPER_OP
, (CHAR8
**)&mToUpper
),
2358 CIfrOpHeader (EFI_IFR_TO_UPPER_OP
, &mToUpper
->Header
) {
2363 class CIfrToLower
: public CIfrObj
, public CIfrOpHeader
{
2365 EFI_IFR_TO_LOWER
*mToLower
;
2370 ) : CIfrObj (EFI_IFR_TO_LOWER_OP
, (CHAR8
**)&mToLower
),
2371 CIfrOpHeader (EFI_IFR_TO_LOWER_OP
, &mToLower
->Header
) {
2376 class CIfrAdd
: public CIfrObj
, public CIfrOpHeader
{
2383 ) : CIfrObj (EFI_IFR_ADD_OP
, (CHAR8
**)&mAdd
),
2384 CIfrOpHeader (EFI_IFR_ADD_OP
, &mAdd
->Header
) {
2389 class CIfrBitWiseAnd
: public CIfrObj
, public CIfrOpHeader
{
2391 EFI_IFR_BITWISE_AND
*mBitWiseAnd
;
2396 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP
, (CHAR8
**)&mBitWiseAnd
),
2397 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP
, &mBitWiseAnd
->Header
) {
2402 class CIfrBitWiseOr
: public CIfrObj
, public CIfrOpHeader
{
2404 EFI_IFR_BITWISE_OR
*mBitWiseOr
;
2409 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP
, (CHAR8
**)&mBitWiseOr
),
2410 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP
, &mBitWiseOr
->Header
) {
2415 class CIfrAnd
: public CIfrObj
, public CIfrOpHeader
{
2422 ) : CIfrObj (EFI_IFR_AND_OP
, (CHAR8
**)&mAnd
),
2423 CIfrOpHeader (EFI_IFR_AND_OP
, &mAnd
->Header
) {
2428 class CIfrCatenate
: public CIfrObj
, public CIfrOpHeader
{
2430 EFI_IFR_CATENATE
*mCatenate
;
2435 ) : CIfrObj (EFI_IFR_CATENATE_OP
, (CHAR8
**)&mCatenate
),
2436 CIfrOpHeader (EFI_IFR_CATENATE_OP
, &mCatenate
->Header
) {
2441 class CIfrDivide
: public CIfrObj
, public CIfrOpHeader
{
2443 EFI_IFR_DIVIDE
*mDivide
;
2448 ) : CIfrObj (EFI_IFR_DIVIDE_OP
, (CHAR8
**)&mDivide
),
2449 CIfrOpHeader (EFI_IFR_DIVIDE_OP
, &mDivide
->Header
) {
2454 class CIfrEqual
: public CIfrObj
, public CIfrOpHeader
{
2456 EFI_IFR_EQUAL
*mEqual
;
2461 ) : CIfrObj (EFI_IFR_EQUAL_OP
, (CHAR8
**)&mEqual
),
2462 CIfrOpHeader (EFI_IFR_EQUAL_OP
, &mEqual
->Header
) {
2467 class CIfrGreaterEqual
: public CIfrObj
, public CIfrOpHeader
{
2469 EFI_IFR_GREATER_EQUAL
*mGreaterEqual
;
2474 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP
, (CHAR8
**)&mGreaterEqual
),
2475 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP
, &mGreaterEqual
->Header
) {
2480 class CIfrGreaterThan
: public CIfrObj
, public CIfrOpHeader
{
2482 EFI_IFR_GREATER_THAN
*mGreaterThan
;
2487 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP
, (CHAR8
**)&mGreaterThan
),
2488 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP
, &mGreaterThan
->Header
) {
2493 class CIfrLessEqual
: public CIfrObj
, public CIfrOpHeader
{
2495 EFI_IFR_LESS_EQUAL
*mLessEqual
;
2500 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP
, (CHAR8
**)&mLessEqual
),
2501 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP
, &mLessEqual
->Header
) {
2506 class CIfrLessThan
: public CIfrObj
, public CIfrOpHeader
{
2508 EFI_IFR_LESS_THAN
*mLessThan
;
2513 ) : CIfrObj (EFI_IFR_LESS_THAN_OP
, (CHAR8
**)&mLessThan
),
2514 CIfrOpHeader (EFI_IFR_LESS_THAN_OP
, &mLessThan
->Header
) {
2519 class CIfrMap
: public CIfrObj
, public CIfrOpHeader
{
2526 ) : CIfrObj (EFI_IFR_MAP_OP
, (CHAR8
**)&mMap
),
2527 CIfrOpHeader (EFI_IFR_MAP_OP
, &mMap
->Header
) {
2532 class CIfrMatch
: public CIfrObj
, public CIfrOpHeader
{
2534 EFI_IFR_MATCH
*mMatch
;
2539 ) : CIfrObj (EFI_IFR_MATCH_OP
, (CHAR8
**)&mMatch
),
2540 CIfrOpHeader (EFI_IFR_MATCH_OP
, &mMatch
->Header
) {
2545 class CIfrMultiply
: public CIfrObj
, public CIfrOpHeader
{
2547 EFI_IFR_MULTIPLY
*mMultiply
;
2552 ) : CIfrObj (EFI_IFR_MULTIPLY_OP
, (CHAR8
**)&mMultiply
),
2553 CIfrOpHeader (EFI_IFR_MULTIPLY_OP
, &mMultiply
->Header
) {
2558 class CIfrModulo
: public CIfrObj
, public CIfrOpHeader
{
2560 EFI_IFR_MODULO
*mModulo
;
2565 ) : CIfrObj (EFI_IFR_MODULO_OP
, (CHAR8
**)&mModulo
),
2566 CIfrOpHeader (EFI_IFR_MODULO_OP
, &mModulo
->Header
) {
2571 class CIfrNotEqual
: public CIfrObj
, public CIfrOpHeader
{
2573 EFI_IFR_NOT_EQUAL
*mNotEqual
;
2578 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP
, (CHAR8
**)&mNotEqual
),
2579 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP
, &mNotEqual
->Header
) {
2584 class CIfrOr
: public CIfrObj
, public CIfrOpHeader
{
2591 ) : CIfrObj (EFI_IFR_OR_OP
, (CHAR8
**)&mOr
),
2592 CIfrOpHeader (EFI_IFR_OR_OP
, &mOr
->Header
) {
2597 class CIfrShiftLeft
: public CIfrObj
, public CIfrOpHeader
{
2599 EFI_IFR_SHIFT_LEFT
*mShiftLeft
;
2604 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP
, (CHAR8
**)&mShiftLeft
),
2605 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP
, &mShiftLeft
->Header
) {
2610 class CIfrShiftRight
: public CIfrObj
, public CIfrOpHeader
{
2612 EFI_IFR_SHIFT_RIGHT
*mShiftRight
;
2617 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP
, (CHAR8
**)&mShiftRight
),
2618 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP
, &mShiftRight
->Header
) {
2623 class CIfrSubtract
: public CIfrObj
, public CIfrOpHeader
{
2625 EFI_IFR_SUBTRACT
*mSubtract
;
2630 ) : CIfrObj (EFI_IFR_SUBTRACT_OP
, (CHAR8
**)&mSubtract
),
2631 CIfrOpHeader (EFI_IFR_SUBTRACT_OP
, &mSubtract
->Header
) {
2636 class CIfrConditional
: public CIfrObj
, public CIfrOpHeader
{
2638 EFI_IFR_CONDITIONAL
*mConditional
;
2643 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP
, (CHAR8
**)&mConditional
),
2644 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP
, &mConditional
->Header
) {
2649 class CIfrFind
: public CIfrObj
, public CIfrOpHeader
{
2651 EFI_IFR_FIND
*mFind
;
2656 ) : CIfrObj (EFI_IFR_FIND_OP
, (CHAR8
**)&mFind
),
2657 CIfrOpHeader (EFI_IFR_FIND_OP
, &mFind
->Header
) {
2661 VOID
SetFormat (IN UINT8 Format
) {
2662 mFind
->Format
= Format
;
2666 class CIfrMid
: public CIfrObj
, public CIfrOpHeader
{
2673 ) : CIfrObj (EFI_IFR_MID_OP
, (CHAR8
**)&mMid
),
2674 CIfrOpHeader (EFI_IFR_MID_OP
, &mMid
->Header
) {
2679 class CIfrToken
: public CIfrObj
, public CIfrOpHeader
{
2681 EFI_IFR_TOKEN
*mToken
;
2686 ) : CIfrObj (EFI_IFR_TOKEN_OP
, (CHAR8
**)&mToken
),
2687 CIfrOpHeader (EFI_IFR_TOKEN_OP
, &mToken
->Header
) {
2692 class CIfrSpan
: public CIfrObj
, public CIfrOpHeader
{
2694 EFI_IFR_SPAN
*mSpan
;
2699 ) : CIfrObj (EFI_IFR_SPAN_OP
, (CHAR8
**)&mSpan
),
2700 CIfrOpHeader (EFI_IFR_SPAN_OP
, &mSpan
->Header
) {
2702 mSpan
->Flags
= EFI_IFR_FLAGS_FIRST_MATCHING
;
2705 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
2706 if (_IS_EQUAL (LFlags
, EFI_IFR_FLAGS_FIRST_MATCHING
)) {
2707 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_MATCHING
;
2708 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_FIRST_NON_MATCHING
)) {
2709 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_NON_MATCHING
;
2712 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;