3 The definition of CFormPkg's member function
5 Copyright (c) 2004 - 2016, 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
);
118 SBufferNode
* GetBinBufferNodeForAddr (IN CHAR8
*);
119 SBufferNode
* CreateNewNode ();
120 SBufferNode
* GetNodeBefore (IN SBufferNode
*);
121 EFI_VFR_RETURN_CODE
InsertNodeBefore (IN SBufferNode
*, IN SBufferNode
*);
124 SPendingAssign
*PendingAssignList
;
127 CFormPkg (IN UINT32 BufferSize
= 4096);
130 CHAR8
* IfrBinBufferGet (IN UINT32
);
131 inline UINT32
GetPkgLength (VOID
);
134 UINT32
Read (IN CHAR8
*, IN UINT32
);
137 EFI_VFR_RETURN_CODE
BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER
**);
138 EFI_VFR_RETURN_CODE
BuildPkg (IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
139 EFI_VFR_RETURN_CODE
BuildPkg (OUT PACKAGE_DATA
&);
140 EFI_VFR_RETURN_CODE
GenCFile (IN CHAR8
*, IN
FILE *, IN PACKAGE_DATA
*PkgData
= NULL
);
143 EFI_VFR_RETURN_CODE
AssignPending (IN CHAR8
*, IN VOID
*, IN UINT32
, IN UINT32
, IN CONST CHAR8
*Msg
= NULL
);
144 VOID
DoPendingAssign (IN CHAR8
*, IN VOID
*, IN UINT32
);
145 bool HavePendingUnassigned (VOID
);
146 VOID
PendingAssignPrintAll (VOID
);
147 EFI_VFR_RETURN_CODE
DeclarePendingQuestion (
148 IN CVfrVarDataTypeDB
&lCVfrVarDataTypeDB
,
149 IN CVfrDataStorage
&lCVfrDataStorage
,
150 IN CVfrQuestionDB
&lCVfrQuestionDB
,
151 IN EFI_GUID
*LocalFormSetGuid
,
153 OUT CHAR8
**InsertOpcodeAddr
155 EFI_VFR_RETURN_CODE
AdjustDynamicInsertOpcode (
156 IN CHAR8
*LastFormEndAddr
,
157 IN CHAR8
*InsertOpcodeAddr
,
158 IN BOOLEAN CreateOpcodeAfterParsingVfr
160 CHAR8
* GetBufAddrBaseOnOffset (
165 extern CFormPkg gCFormPkg
;
166 extern CVfrStringDB gCVfrStringDB
;
167 extern UINT32 gAdjustOpcodeOffset
;
168 extern BOOLEAN gNeedAdjustOpcode
;
182 #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
183 #define EFI_IFR_RECORDINFO_IDX_START 0x0
184 #define EFI_HII_MAX_SUPPORT_DEFAULT_TYPE 0x08
186 struct QuestionDefaultRecord
{
187 BOOLEAN mIsDefaultIdExist
[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE
]; // Record the default id in mAllDefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE]
188 // whether exists in current question.
190 SIfrRecord
*mDefaultValueRecord
; // Point to the default value record in RecordList which has smallest default Id.
191 // (for checkbox it may be NULL, because the dedault value is always true when the flag is set.)
193 BOOLEAN mIsDefaultOpcode
; // whether the default value with smallest default id is given by default opcode.
194 // (for oneof and checkbox default info may be given by flag.)
196 UINT16 mDefaultNumber
; // The default number of this question.
199 class CIfrRecordInfoDB
{
203 SIfrRecord
*mIfrRecordListHead
;
204 SIfrRecord
*mIfrRecordListTail
;
205 UINT8 mAllDefaultTypeCount
;
206 UINT16 mAllDefaultIdArray
[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE
];
208 SIfrRecord
* GetRecordInfoFromIdx (IN UINT32
);
209 BOOLEAN
CheckQuestionOpCode (IN UINT8
);
210 BOOLEAN
CheckIdOpCode (IN UINT8
);
211 EFI_QUESTION_ID
GetOpcodeQuestionId (IN EFI_IFR_OP_HEADER
*);
213 CIfrRecordInfoDB (VOID
);
214 ~CIfrRecordInfoDB (VOID
);
216 inline VOID
TurnOn (VOID
) {
220 inline VOID
TurnOff (VOID
) {
224 SIfrRecord
* GetRecordInfoFromOffset (IN UINT32
);
225 VOID
IfrAdjustOffsetForRecord (VOID
);
226 BOOLEAN
IfrAdjustDynamicOpcodeInRecords (IN BOOLEAN
);
228 UINT32
IfrRecordRegister (IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
229 VOID
IfrRecordInfoUpdate (IN UINT32
, IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
230 VOID
IfrRecordOutput (IN
FILE *, IN UINT32 LineNo
);
231 VOID
IfrRecordOutput (OUT PACKAGE_DATA
&);
232 EFI_VFR_RETURN_CODE
IfrRecordAdjust (VOID
);
233 VOID
IfrUpdateRecordInfoForDynamicOpcode (IN BOOLEAN
);
234 VOID
IfrCheckAddDefaultRecord (IN BOOLEAN
, IN BOOLEAN
);
235 VOID
IfrGetDefaultStoreInfo ();
236 VOID
IfrCreateDefaultRecord (IN UINT8 Size
,IN UINT16 DefaultId
,IN UINT8 Type
,IN UINT32 LineNo
,IN EFI_IFR_TYPE_VALUE Value
);
237 VOID
IfrCreateDefaultForQuestion (IN SIfrRecord
*, IN QuestionDefaultRecord
*);
238 VOID
IfrParseDefaulInfoInQuestion (IN SIfrRecord
*, OUT QuestionDefaultRecord
*);
239 VOID
IfrAddDefaultToBufferConfig (IN UINT16
, IN SIfrRecord
*,IN EFI_IFR_TYPE_VALUE
);
242 extern CIfrRecordInfoDB gCIfrRecordInfoDB
;
245 * The definition of CIfrObj
247 extern BOOLEAN gCreateOp
;
260 CIfrObj (IN UINT8 OpCode
, OUT CHAR8
**IfrObj
= NULL
, IN UINT8 ObjBinLen
= 0, IN BOOLEAN DelayEmit
= FALSE
);
261 virtual ~CIfrObj(VOID
);
263 VOID
_EMIT_PENDING_OBJ (VOID
);
265 inline VOID
SetLineNo (IN UINT32 LineNo
) {
269 inline CHAR8
* GetObjBinAddr (VOID
) {
273 inline UINT32
GetObjBinOffset (VOID
) {
277 inline UINT8
GetObjBinLen (VOID
) {
281 inline bool ExpendObjBin (IN UINT8 Size
) {
282 if ((mDelayEmit
== TRUE
) && ((mObjBinLen
+ Size
) > mObjBinLen
)) {
283 mObjBinLen
= mObjBinLen
+ Size
;
290 inline bool ShrinkObjBin (IN UINT8 Size
) {
291 if ((mDelayEmit
== TRUE
) && (mObjBinLen
> Size
)) {
301 * The definition of CIfrOpHeader
305 EFI_IFR_OP_HEADER
*mHeader
;
308 CIfrOpHeader (IN UINT8 OpCode
, IN VOID
*StartAddr
, IN UINT8 Length
= 0);
309 CIfrOpHeader (IN CIfrOpHeader
&);
310 CIfrOpHeader
& operator=(IN CONST CIfrOpHeader
&);
312 VOID
IncLength (UINT8 Size
) {
313 if ((mHeader
->Length
+ Size
) > mHeader
->Length
) {
314 mHeader
->Length
= mHeader
->Length
+ Size
;
318 VOID
DecLength (UINT8 Size
) {
319 if (mHeader
->Length
>= Size
) {
320 mHeader
->Length
-= Size
;
325 return mHeader
->Length
;
329 return mHeader
->Scope
;
332 VOID
SetScope (IN UINT8 Scope
) {
333 mHeader
->Scope
= Scope
;
336 VOID
UpdateHeader (IN EFI_IFR_OP_HEADER
*Header
) {
341 return mHeader
->OpCode
;
345 extern UINT8 gScopeCount
;
348 * The definition of CIfrStatementHeader
350 class CIfrStatementHeader
{
352 EFI_IFR_STATEMENT_HEADER
*mHeader
;
355 CIfrStatementHeader (
356 IN EFI_IFR_STATEMENT_HEADER
*StartAddr
357 ) : mHeader ((EFI_IFR_STATEMENT_HEADER
*)StartAddr
) {
359 mHeader
->Help
= EFI_STRING_ID_INVALID
;
360 mHeader
->Prompt
= EFI_STRING_ID_INVALID
;
363 EFI_IFR_STATEMENT_HEADER
*GetStatementHeader () {
367 VOID
SetPrompt (IN EFI_STRING_ID Prompt
) {
368 mHeader
->Prompt
= Prompt
;
371 VOID
SetHelp (IN EFI_STRING_ID Help
) {
372 mHeader
->Help
= Help
;
377 * The definition of CIfrQuestionHeader
379 #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
381 class CIfrQuestionHeader
: public CIfrStatementHeader
{
383 EFI_IFR_QUESTION_HEADER
*mHeader
;
385 EFI_IFR_STATEMENT_HEADER
* QH2SH (EFI_IFR_QUESTION_HEADER
*Qheader
) {
386 return &(Qheader
)->Header
;
390 EFI_QUESTION_ID
QUESTION_ID (VOID
) {
391 return mHeader
->QuestionId
;
394 EFI_VARSTORE_ID
VARSTORE_ID (VOID
) {
395 return mHeader
->VarStoreId
;
398 VOID
VARSTORE_INFO (OUT EFI_VARSTORE_INFO
*Info
) {
400 Info
->mVarStoreId
= mHeader
->VarStoreId
;
401 memmove (&Info
->mVarStoreId
, &mHeader
->VarStoreInfo
, sizeof (Info
->mVarStoreId
));
406 return mHeader
->Flags
;
411 IN EFI_IFR_QUESTION_HEADER
*StartAddr
,
412 IN UINT8 Flags
= EFI_IFR_QUESTION_FLAG_DEFAULT
413 ) : CIfrStatementHeader (QH2SH(StartAddr
)) {
415 mHeader
->QuestionId
= EFI_QUESTION_ID_INVALID
;
416 mHeader
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
417 mHeader
->VarStoreInfo
.VarName
= EFI_STRING_ID_INVALID
;
418 mHeader
->VarStoreInfo
.VarOffset
= EFI_VAROFFSET_INVALID
;
419 mHeader
->Flags
= Flags
;
422 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
423 mHeader
->QuestionId
= QuestionId
;
426 VOID
SetVarStoreInfo (IN EFI_VARSTORE_INFO
*Info
) {
427 mHeader
->VarStoreId
= Info
->mVarStoreId
;
428 mHeader
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
429 mHeader
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
432 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 Flags
) {
433 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_READ_ONLY
)) {
434 mHeader
->Flags
|= EFI_IFR_FLAG_READ_ONLY
;
437 _FLAG_CLEAR (Flags
, 0x02);
439 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_CALLBACK
)) {
440 mHeader
->Flags
|= EFI_IFR_FLAG_CALLBACK
;
444 // ignore NVAccessFlag
446 _FLAG_CLEAR (Flags
, 0x08);
448 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RESET_REQUIRED
)) {
449 mHeader
->Flags
|= EFI_IFR_FLAG_RESET_REQUIRED
;
452 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RECONNECT_REQUIRED
)) {
453 mHeader
->Flags
|= EFI_IFR_FLAG_RECONNECT_REQUIRED
;
457 // Set LateCheck Flag to compatible for framework flag
458 // but it uses 0x20 as its flag, if in the future UEFI may take this flag
460 if (_FLAG_TEST_AND_CLEAR (Flags
, 0x20)) {
461 mHeader
->Flags
|= 0x20;
464 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_OPTIONS_ONLY
)) {
465 mHeader
->Flags
|= EFI_IFR_FLAG_OPTIONS_ONLY
;
468 return _FLAGS_ZERO (Flags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
471 VOID
UpdateCIfrQuestionHeader (IN EFI_IFR_QUESTION_HEADER
*Header
) {
477 * The definition of CIfrMinMaxStepData
479 class CIfrMinMaxStepData
{
481 MINMAXSTEP_DATA
*mMinMaxStepData
;
486 CIfrMinMaxStepData (MINMAXSTEP_DATA
*DataAddr
, BOOLEAN NumericOpcode
=FALSE
) : mMinMaxStepData (DataAddr
) {
487 mMinMaxStepData
->u64
.MinValue
= 0;
488 mMinMaxStepData
->u64
.MaxValue
= 0;
489 mMinMaxStepData
->u64
.Step
= 0;
491 IsNumeric
= NumericOpcode
;
494 VOID
SetMinMaxStepData (IN UINT64 MinValue
, IN UINT64 MaxValue
, IN UINT64 Step
) {
496 mMinMaxStepData
->u64
.MinValue
= MinValue
;
497 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
500 if (MinValue
< mMinMaxStepData
->u64
.MinValue
) {
501 mMinMaxStepData
->u64
.MinValue
= MinValue
;
503 if (MaxValue
> mMinMaxStepData
->u64
.MaxValue
) {
504 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
507 mMinMaxStepData
->u64
.Step
= Step
;
510 VOID
SetMinMaxStepData (IN UINT32 MinValue
, IN UINT32 MaxValue
, IN UINT32 Step
) {
512 mMinMaxStepData
->u32
.MinValue
= MinValue
;
513 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
516 if (MinValue
< mMinMaxStepData
->u32
.MinValue
) {
517 mMinMaxStepData
->u32
.MinValue
= MinValue
;
519 if (MaxValue
> mMinMaxStepData
->u32
.MaxValue
) {
520 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
523 mMinMaxStepData
->u32
.Step
= Step
;
526 VOID
SetMinMaxStepData (IN UINT16 MinValue
, IN UINT16 MaxValue
, IN UINT16 Step
) {
528 mMinMaxStepData
->u16
.MinValue
= MinValue
;
529 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
532 if (MinValue
< mMinMaxStepData
->u16
.MinValue
) {
533 mMinMaxStepData
->u16
.MinValue
= MinValue
;
535 if (MaxValue
> mMinMaxStepData
->u16
.MaxValue
) {
536 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
539 mMinMaxStepData
->u16
.Step
= Step
;
542 VOID
SetMinMaxStepData (IN UINT8 MinValue
, IN UINT8 MaxValue
, IN UINT8 Step
) {
544 mMinMaxStepData
->u8
.MinValue
= MinValue
;
545 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
548 if (MinValue
< mMinMaxStepData
->u8
.MinValue
) {
549 mMinMaxStepData
->u8
.MinValue
= MinValue
;
551 if (MaxValue
> mMinMaxStepData
->u8
.MaxValue
) {
552 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
555 mMinMaxStepData
->u8
.Step
= Step
;
558 UINT64
GetMinData (UINT8 VarType
) {
561 case EFI_IFR_TYPE_NUM_SIZE_64
:
562 MinValue
= mMinMaxStepData
->u64
.MinValue
;
564 case EFI_IFR_TYPE_NUM_SIZE_32
:
565 MinValue
= (UINT64
) mMinMaxStepData
->u32
.MinValue
;
567 case EFI_IFR_TYPE_NUM_SIZE_16
:
568 MinValue
= (UINT64
) mMinMaxStepData
->u16
.MinValue
;
570 case EFI_IFR_TYPE_NUM_SIZE_8
:
571 MinValue
= (UINT64
) mMinMaxStepData
->u8
.MinValue
;
579 UINT64
GetMaxData (UINT8 VarType
) {
582 case EFI_IFR_TYPE_NUM_SIZE_64
:
583 MaxValue
= mMinMaxStepData
->u64
.MaxValue
;
585 case EFI_IFR_TYPE_NUM_SIZE_32
:
586 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.MaxValue
;
588 case EFI_IFR_TYPE_NUM_SIZE_16
:
589 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.MaxValue
;
591 case EFI_IFR_TYPE_NUM_SIZE_8
:
592 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.MaxValue
;
600 UINT64
GetStepData (UINT8 VarType
) {
603 case EFI_IFR_TYPE_NUM_SIZE_64
:
604 MaxValue
= mMinMaxStepData
->u64
.Step
;
606 case EFI_IFR_TYPE_NUM_SIZE_32
:
607 MaxValue
= (UINT64
) mMinMaxStepData
->u32
.Step
;
609 case EFI_IFR_TYPE_NUM_SIZE_16
:
610 MaxValue
= (UINT64
) mMinMaxStepData
->u16
.Step
;
612 case EFI_IFR_TYPE_NUM_SIZE_8
:
613 MaxValue
= (UINT64
) mMinMaxStepData
->u8
.Step
;
621 BOOLEAN
IsNumericOpcode () {
625 VOID
UpdateCIfrMinMaxStepData (IN MINMAXSTEP_DATA
*MinMaxStepData
) {
626 mMinMaxStepData
= MinMaxStepData
;
630 static CIfrQuestionHeader
*gCurrentQuestion
= NULL
;
631 static CIfrMinMaxStepData
*gCurrentMinMaxData
= NULL
;
632 static BOOLEAN gIsOrderedList
= FALSE
;
633 static BOOLEAN gIsStringOp
= FALSE
;
636 * The definition of all of the UEFI IFR Objects
638 class CIfrFormSet
: public CIfrObj
, public CIfrOpHeader
{
640 EFI_IFR_FORM_SET
*mFormSet
;
641 EFI_GUID
*mClassGuid
;
644 CIfrFormSet (UINT8 Size
) : CIfrObj (EFI_IFR_FORM_SET_OP
, (CHAR8
**)&mFormSet
, Size
),
645 CIfrOpHeader (EFI_IFR_FORM_SET_OP
, &mFormSet
->Header
, Size
) {
646 mFormSet
->Help
= EFI_STRING_ID_INVALID
;
647 mFormSet
->FormSetTitle
= EFI_STRING_ID_INVALID
;
649 memset (&mFormSet
->Guid
, 0, sizeof (EFI_GUID
));
650 mClassGuid
= (EFI_GUID
*) (mFormSet
+ 1);
653 VOID
SetGuid (IN EFI_GUID
*Guid
) {
654 memmove (&mFormSet
->Guid
, Guid
, sizeof (EFI_GUID
));
657 VOID
SetFormSetTitle (IN EFI_STRING_ID FormSetTitle
) {
658 mFormSet
->FormSetTitle
= FormSetTitle
;
661 VOID
SetHelp (IN EFI_STRING_ID Help
) {
662 mFormSet
->Help
= Help
;
665 VOID
SetClassGuid (IN EFI_GUID
*Guid
) {
666 memmove (&(mClassGuid
[mFormSet
->Flags
++]), Guid
, sizeof (EFI_GUID
));
670 return mFormSet
->Flags
;
674 class CIfrEnd
: public CIfrObj
, public CIfrOpHeader
{
679 CIfrEnd () : CIfrObj (EFI_IFR_END_OP
, (CHAR8
**)&mEnd
),
680 CIfrOpHeader (EFI_IFR_END_OP
, &mEnd
->Header
) {}
683 class CIfrDefaultStore
: public CIfrObj
, public CIfrOpHeader
{
685 EFI_IFR_DEFAULTSTORE
*mDefaultStore
;
688 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP
, (CHAR8
**)&mDefaultStore
),
689 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP
, &mDefaultStore
->Header
) {
690 mDefaultStore
->DefaultId
= EFI_VARSTORE_ID_INVALID
;
691 mDefaultStore
->DefaultName
= EFI_STRING_ID_INVALID
;
694 VOID
SetDefaultName (IN EFI_STRING_ID DefaultName
) {
695 mDefaultStore
->DefaultName
= DefaultName
;
698 VOID
SetDefaultId (IN UINT16 DefaultId
) {
699 mDefaultStore
->DefaultId
= DefaultId
;
703 #define EFI_FORM_ID_MAX 0xFFFF
704 #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
708 STATIC UINT32 FormIdBitMap
[EFI_FREE_FORM_ID_BITMAP_SIZE
];
710 STATIC BOOLEAN
ChekFormIdFree (IN EFI_FORM_ID FormId
) {
711 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
712 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
714 return (FormIdBitMap
[Index
] & (0x80000000 >> Offset
)) == 0;
717 STATIC VOID
MarkFormIdUsed (IN EFI_FORM_ID FormId
) {
718 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
719 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
721 FormIdBitMap
[Index
] |= (0x80000000 >> Offset
);
725 class CIfrForm
: public CIfrObj
, public CIfrOpHeader
{
730 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP
, (CHAR8
**)&mForm
),
731 CIfrOpHeader (EFI_IFR_FORM_OP
, &mForm
->Header
) {
733 mForm
->FormTitle
= EFI_STRING_ID_INVALID
;
736 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
739 // FormId can't be 0.
741 return VFR_RETURN_INVALID_PARAMETER
;
743 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
744 return VFR_RETURN_FORMID_REDEFINED
;
746 mForm
->FormId
= FormId
;
747 CIfrFormId::MarkFormIdUsed (FormId
);
748 return VFR_RETURN_SUCCESS
;
751 VOID
SetFormTitle (IN EFI_STRING_ID FormTitle
) {
752 mForm
->FormTitle
= FormTitle
;
756 class CIfrFormMap
: public CIfrObj
, public CIfrOpHeader
{
758 EFI_IFR_FORM_MAP
*mFormMap
;
759 EFI_IFR_FORM_MAP_METHOD
*mMethodMap
;
762 CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP
, (CHAR8
**)&mFormMap
, sizeof (EFI_IFR_FORM_MAP
), TRUE
),
763 CIfrOpHeader (EFI_IFR_FORM_MAP_OP
, &mFormMap
->Header
) {
764 mFormMap
->FormId
= 0;
765 mMethodMap
= (EFI_IFR_FORM_MAP_METHOD
*) (mFormMap
+ 1);
768 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
771 // FormId can't be 0.
773 return VFR_RETURN_INVALID_PARAMETER
;
775 if (CIfrFormId::ChekFormIdFree (FormId
) == FALSE
) {
776 return VFR_RETURN_FORMID_REDEFINED
;
778 mFormMap
->FormId
= FormId
;
779 CIfrFormId::MarkFormIdUsed (FormId
);
780 return VFR_RETURN_SUCCESS
;
783 VOID
SetFormMapMethod (IN EFI_STRING_ID MethodTitle
, IN EFI_GUID
*MethodGuid
) {
784 if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD
))) {
785 IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD
));
787 mMethodMap
->MethodTitle
= MethodTitle
;
788 memmove (&(mMethodMap
->MethodIdentifier
), MethodGuid
, sizeof (EFI_GUID
));
794 class CIfrVarStore
: public CIfrObj
, public CIfrOpHeader
{
796 EFI_IFR_VARSTORE
*mVarStore
;
799 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP
, (CHAR8
**)&mVarStore
, sizeof (EFI_IFR_VARSTORE
), TRUE
),
800 CIfrOpHeader (EFI_IFR_VARSTORE_OP
, &mVarStore
->Header
) {
801 mVarStore
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
803 memset (&mVarStore
->Guid
, 0, sizeof (EFI_GUID
));
804 mVarStore
->Name
[0] = '\0';
807 VOID
SetGuid (IN EFI_GUID
*Guid
) {
808 memmove (&mVarStore
->Guid
, Guid
, sizeof (EFI_GUID
));
811 VOID
SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId
) {
812 mVarStore
->VarStoreId
= VarStoreId
;
815 VOID
SetSize (IN UINT16 Size
) {
816 mVarStore
->Size
= Size
;
819 VOID
SetName (IN CHAR8
*Name
) {
823 Len
= (UINT8
) strlen (Name
);
825 if (ExpendObjBin (Len
) == TRUE
) {
827 strcpy ((CHAR8
*)(mVarStore
->Name
), Name
);
834 class CIfrVarStoreEfi
: public CIfrObj
, public CIfrOpHeader
{
836 EFI_IFR_VARSTORE_EFI
*mVarStoreEfi
;
839 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP
, (CHAR8
**)&mVarStoreEfi
, sizeof (EFI_IFR_VARSTORE_EFI
), TRUE
),
840 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP
, &mVarStoreEfi
->Header
) {
841 mVarStoreEfi
->VarStoreId
= EFI_VAROFFSET_INVALID
;
842 mVarStoreEfi
->Size
= 0;
843 memset (&mVarStoreEfi
->Guid
, 0, sizeof (EFI_GUID
));
844 mVarStoreEfi
->Name
[0] = '\0';
847 VOID
SetGuid (IN EFI_GUID
*Guid
) {
848 memmove (&mVarStoreEfi
->Guid
, Guid
, sizeof (EFI_GUID
));
851 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
852 mVarStoreEfi
->VarStoreId
= VarStoreId
;
855 VOID
SetAttributes (IN UINT32 Attributes
) {
856 mVarStoreEfi
->Attributes
= Attributes
;
858 VOID
SetSize (IN UINT16 Size
) {
859 mVarStoreEfi
->Size
= Size
;
862 VOID
SetName (IN CHAR8
*Name
) {
866 Len
= (UINT8
) strlen (Name
);
868 if (ExpendObjBin (Len
) == TRUE
) {
870 strcpy ((CHAR8
*)(mVarStoreEfi
->Name
), Name
);
876 VOID
SetBinaryLength (IN UINT16 Size
) {
879 Len
= sizeof (EFI_IFR_VARSTORE_EFI
);
881 ExpendObjBin(Size
- Len
);
882 IncLength(Size
- Len
);
884 ShrinkObjBin(Len
- Size
);
885 DecLength(Len
- Size
);
890 class CIfrVarStoreNameValue
: public CIfrObj
, public CIfrOpHeader
{
892 EFI_IFR_VARSTORE_NAME_VALUE
*mVarStoreNameValue
;
895 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP
, (CHAR8
**)&mVarStoreNameValue
),
896 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP
, &mVarStoreNameValue
->Header
) {
897 mVarStoreNameValue
->VarStoreId
= EFI_VAROFFSET_INVALID
;
898 memset (&mVarStoreNameValue
->Guid
, 0, sizeof (EFI_GUID
));
901 VOID
SetGuid (IN EFI_GUID
*Guid
) {
902 memmove (&mVarStoreNameValue
->Guid
, Guid
, sizeof (EFI_GUID
));
905 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
906 mVarStoreNameValue
->VarStoreId
= VarStoreId
;
910 class CIfrImage
: public CIfrObj
, public CIfrOpHeader
{
912 EFI_IFR_IMAGE
*mImage
;
915 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP
, (CHAR8
**)&mImage
),
916 CIfrOpHeader (EFI_IFR_IMAGE_OP
, &mImage
->Header
) {
917 mImage
->Id
= EFI_IMAGE_ID_INVALID
;
920 VOID
SetImageId (IN EFI_IMAGE_ID ImageId
) {
921 mImage
->Id
= ImageId
;
925 class CIfrModal
: public CIfrObj
, public CIfrOpHeader
{
927 EFI_IFR_MODAL_TAG
*mModal
;
930 CIfrModal () : CIfrObj (EFI_IFR_MODAL_TAG_OP
, (CHAR8
**)&mModal
),
931 CIfrOpHeader (EFI_IFR_MODAL_TAG_OP
, &mModal
->Header
) {
936 class CIfrLocked
: public CIfrObj
, public CIfrOpHeader
{
938 EFI_IFR_LOCKED
*mLocked
;
941 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP
, (CHAR8
**)&mLocked
),
942 CIfrOpHeader (EFI_IFR_LOCKED_OP
, &mLocked
->Header
) {}
945 class CIfrRule
: public CIfrObj
, public CIfrOpHeader
{
950 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP
, (CHAR8
**)&mRule
),
951 mRule ((EFI_IFR_RULE
*)GetObjBinAddr()),
952 CIfrOpHeader (EFI_IFR_RULE_OP
, &mRule
->Header
) {
953 mRule
->RuleId
= EFI_RULE_ID_INVALID
;
956 VOID
SetRuleId (IN UINT8 RuleId
) {
957 mRule
->RuleId
= RuleId
;
961 static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue
= {0, };
963 class CIfrDefault
: public CIfrObj
, public CIfrOpHeader
{
965 EFI_IFR_DEFAULT
*mDefault
;
970 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
971 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
,
972 IN EFI_IFR_TYPE_VALUE Value
= gZeroEfiIfrTypeValue
973 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
, Size
),
974 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
, Size
) {
975 mDefault
->Type
= Type
;
976 mDefault
->DefaultId
= DefaultId
;
977 memmove (&(mDefault
->Value
), &Value
, Size
- OFFSET_OF (EFI_IFR_DEFAULT
, Value
));
980 VOID
SetDefaultId (IN UINT16 DefaultId
) {
981 mDefault
->DefaultId
= DefaultId
;
984 VOID
SetType (IN UINT8 Type
) {
985 mDefault
->Type
= Type
;
988 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
989 memmove (&mDefault
->Value
, &Value
, mDefault
->Header
.Length
- OFFSET_OF (EFI_IFR_DEFAULT
, Value
));
993 class CIfrDefault2
: public CIfrObj
, public CIfrOpHeader
{
995 EFI_IFR_DEFAULT_2
*mDefault
;
999 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
1000 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
1001 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
, sizeof (EFI_IFR_DEFAULT_2
)),
1002 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
, sizeof (EFI_IFR_DEFAULT_2
)) {
1003 mDefault
->Type
= Type
;
1004 mDefault
->DefaultId
= DefaultId
;
1007 VOID
SetDefaultId (IN UINT16 DefaultId
) {
1008 mDefault
->DefaultId
= DefaultId
;
1011 VOID
SetType (IN UINT8 Type
) {
1012 mDefault
->Type
= Type
;
1016 class CIfrValue
: public CIfrObj
, public CIfrOpHeader
{
1018 EFI_IFR_VALUE
*mValue
;
1021 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP
, (CHAR8
**)&mValue
),
1022 CIfrOpHeader (EFI_IFR_VALUE_OP
, &mValue
->Header
) {}
1026 class CIfrRead
: public CIfrObj
, public CIfrOpHeader
{
1028 EFI_IFR_READ
*mRead
;
1031 CIfrRead () : CIfrObj (EFI_IFR_READ_OP
, (CHAR8
**)&mRead
),
1032 CIfrOpHeader (EFI_IFR_READ_OP
, &mRead
->Header
) {}
1036 class CIfrWrite
: public CIfrObj
, public CIfrOpHeader
{
1038 EFI_IFR_WRITE
*mWrite
;
1041 CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP
, (CHAR8
**)&mWrite
),
1042 CIfrOpHeader (EFI_IFR_WRITE_OP
, &mWrite
->Header
) {}
1046 class CIfrGet
: public CIfrObj
, public CIfrOpHeader
{
1053 ) : CIfrObj (EFI_IFR_GET_OP
, (CHAR8
**)&mGet
),
1054 CIfrOpHeader (EFI_IFR_GET_OP
, &mGet
->Header
) {
1058 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
1059 mGet
->VarStoreId
= Info
->mVarStoreId
;
1060 mGet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
1061 mGet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
1062 mGet
->VarStoreType
= Info
->mVarType
;
1066 class CIfrSet
: public CIfrObj
, public CIfrOpHeader
{
1073 ) : CIfrObj (EFI_IFR_SET_OP
, (CHAR8
**)&mSet
),
1074 CIfrOpHeader (EFI_IFR_SET_OP
, &mSet
->Header
) {
1078 VOID
SetVarInfo (IN EFI_VARSTORE_INFO
*Info
) {
1079 mSet
->VarStoreId
= Info
->mVarStoreId
;
1080 mSet
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
1081 mSet
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
1082 mSet
->VarStoreType
= Info
->mVarType
;
1086 class CIfrSubtitle
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1088 EFI_IFR_SUBTITLE
*mSubtitle
;
1091 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP
, (CHAR8
**)&mSubtitle
),
1092 CIfrOpHeader (EFI_IFR_SUBTITLE_OP
, &mSubtitle
->Header
),
1093 CIfrStatementHeader (&mSubtitle
->Statement
) {
1094 mSubtitle
->Flags
= 0;
1097 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1098 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_HORIZONTAL
)) {
1099 mSubtitle
->Flags
|= EFI_IFR_FLAGS_HORIZONTAL
;
1102 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1106 class CIfrText
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1108 EFI_IFR_TEXT
*mText
;
1111 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP
, (CHAR8
**)&mText
),
1112 CIfrOpHeader (EFI_IFR_TEXT_OP
, &mText
->Header
),
1113 CIfrStatementHeader (&mText
->Statement
) {
1114 mText
->TextTwo
= EFI_STRING_ID_INVALID
;
1117 VOID
SetTextTwo (IN EFI_STRING_ID StringId
) {
1118 mText
->TextTwo
= StringId
;
1122 class CIfrRef
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1127 CIfrRef () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef
),
1128 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef
->Header
),
1129 CIfrQuestionHeader (&mRef
->Question
) {
1133 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1134 mRef
->FormId
= FormId
;
1138 class CIfrRef2
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1140 EFI_IFR_REF2
*mRef2
;
1143 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef2
, sizeof (EFI_IFR_REF2
)),
1144 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef2
->Header
, sizeof (EFI_IFR_REF2
)),
1145 CIfrQuestionHeader (&mRef2
->Question
) {
1147 mRef2
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1150 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1151 mRef2
->FormId
= FormId
;
1154 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1155 mRef2
->QuestionId
= QuestionId
;
1159 class CIfrRef3
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1161 EFI_IFR_REF3
*mRef3
;
1164 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef3
, sizeof(EFI_IFR_REF3
)),
1165 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef3
->Header
, sizeof (EFI_IFR_REF3
)),
1166 CIfrQuestionHeader (&mRef3
->Question
) {
1168 mRef3
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1169 memset (&mRef3
->FormSetId
, 0, sizeof (EFI_GUID
));
1172 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1173 mRef3
->FormId
= FormId
;
1176 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1177 mRef3
->QuestionId
= QuestionId
;
1180 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1181 mRef3
->FormSetId
= FormSetId
;
1185 class CIfrRef4
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1187 EFI_IFR_REF4
*mRef4
;
1190 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef4
, sizeof(EFI_IFR_REF4
)),
1191 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef4
->Header
, sizeof(EFI_IFR_REF4
)),
1192 CIfrQuestionHeader (&mRef4
->Question
) {
1194 mRef4
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1195 memset (&mRef4
->FormSetId
, 0, sizeof (EFI_GUID
));
1196 mRef4
->DevicePath
= EFI_STRING_ID_INVALID
;
1199 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
1200 mRef4
->FormId
= FormId
;
1203 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
1204 mRef4
->QuestionId
= QuestionId
;
1207 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
1208 mRef4
->FormSetId
= FormSetId
;
1211 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1212 mRef4
->DevicePath
= DevicePath
;
1216 class CIfrRef5
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1218 EFI_IFR_REF5
*mRef5
;
1221 CIfrRef5 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef5
, sizeof (EFI_IFR_REF5
)),
1222 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef5
->Header
, sizeof (EFI_IFR_REF5
)),
1223 CIfrQuestionHeader (&mRef5
->Question
) {
1227 class CIfrResetButton
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
1229 EFI_IFR_RESET_BUTTON
*mResetButton
;
1232 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP
, (CHAR8
**)&mResetButton
),
1233 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP
, &mResetButton
->Header
),
1234 CIfrStatementHeader (&mResetButton
->Statement
) {
1235 mResetButton
->DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
1238 VOID
SetDefaultId (IN UINT16 DefaultId
) {
1239 mResetButton
->DefaultId
= DefaultId
;
1243 class CIfrCheckBox
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1245 EFI_IFR_CHECKBOX
*mCheckBox
;
1248 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP
, (CHAR8
**)&mCheckBox
),
1249 CIfrOpHeader (EFI_IFR_CHECKBOX_OP
, &mCheckBox
->Header
),
1250 CIfrQuestionHeader (&mCheckBox
->Question
) {
1251 mCheckBox
->Flags
= 0;
1252 gCurrentQuestion
= this;
1256 gCurrentQuestion
= NULL
;
1259 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, UINT8 LFlags
) {
1260 EFI_VFR_RETURN_CODE Ret
;
1262 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1263 if (Ret
!= VFR_RETURN_SUCCESS
) {
1267 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT
)) {
1268 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT
;
1271 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT_MFG
)) {
1272 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT_MFG
;
1275 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1278 UINT8
GetFlags (VOID
) {
1279 return mCheckBox
->Flags
;
1283 class CIfrAction
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1285 EFI_IFR_ACTION
*mAction
;
1288 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP
, (CHAR8
**)&mAction
),
1289 CIfrOpHeader (EFI_IFR_ACTION_OP
, &mAction
->Header
),
1290 CIfrQuestionHeader (&mAction
->Question
) {
1291 mAction
->QuestionConfig
= EFI_STRING_ID_INVALID
;
1294 VOID
SetQuestionConfig (IN EFI_STRING_ID QuestionConfig
) {
1295 mAction
->QuestionConfig
= QuestionConfig
;
1299 class CIfrDate
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1301 EFI_IFR_DATE
*mDate
;
1304 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP
, (CHAR8
**)&mDate
),
1305 CIfrOpHeader (EFI_IFR_DATE_OP
, &mDate
->Header
),
1306 CIfrQuestionHeader (&mDate
->Question
) {
1310 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1311 EFI_VFR_RETURN_CODE Ret
;
1313 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1314 if (Ret
!= VFR_RETURN_SUCCESS
) {
1318 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_YEAR_SUPPRESS
)) {
1319 mDate
->Flags
|= EFI_QF_DATE_YEAR_SUPPRESS
;
1322 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_MONTH_SUPPRESS
)) {
1323 mDate
->Flags
|= EFI_QF_DATE_MONTH_SUPPRESS
;
1326 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_DAY_SUPPRESS
)) {
1327 mDate
->Flags
|= EFI_QF_DATE_DAY_SUPPRESS
;
1330 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_NORMAL
)) {
1331 mDate
->Flags
|= QF_DATE_STORAGE_NORMAL
;
1332 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_TIME
)) {
1333 mDate
->Flags
|= QF_DATE_STORAGE_TIME
;
1334 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_WAKEUP
)) {
1335 mDate
->Flags
|= QF_DATE_STORAGE_WAKEUP
;
1338 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1342 class CIfrNumeric
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1344 EFI_IFR_NUMERIC
*mNumeric
;
1347 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP
, (CHAR8
**)&mNumeric
, sizeof (EFI_IFR_NUMERIC
), TRUE
),
1348 CIfrOpHeader (EFI_IFR_NUMERIC_OP
, &mNumeric
->Header
),
1349 CIfrQuestionHeader (&mNumeric
->Question
),
1350 CIfrMinMaxStepData (&mNumeric
->data
, TRUE
) {
1351 mNumeric
->Flags
= EFI_IFR_NUMERIC_SIZE_1
| EFI_IFR_DISPLAY_UINT_DEC
;
1352 gCurrentQuestion
= this;
1353 gCurrentMinMaxData
= this;
1357 gCurrentQuestion
= NULL
;
1358 gCurrentMinMaxData
= NULL
;
1361 VOID
ShrinkBinSize (IN UINT16 Size
) {
1363 // Update the buffer size which is truly be used later.
1369 // Allocate buffer in gCFormPkg.
1371 _EMIT_PENDING_OBJ();
1374 // Update the buffer pointer used by other class.
1376 mNumeric
= (EFI_IFR_NUMERIC
*) GetObjBinAddr();
1377 UpdateHeader (&mNumeric
->Header
);
1378 UpdateCIfrQuestionHeader(&mNumeric
->Question
);
1379 UpdateCIfrMinMaxStepData(&mNumeric
->data
);
1382 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
, BOOLEAN DisplaySettingsSpecified
= FALSE
) {
1383 EFI_VFR_RETURN_CODE Ret
;
1385 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1386 if (Ret
!= VFR_RETURN_SUCCESS
) {
1390 if (DisplaySettingsSpecified
== FALSE
) {
1391 mNumeric
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1393 mNumeric
->Flags
= LFlags
;
1395 return VFR_RETURN_SUCCESS
;
1398 UINT8
GetNumericFlags () {
1399 return mNumeric
->Flags
;
1403 class CIfrOneOf
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
1405 EFI_IFR_ONE_OF
*mOneOf
;
1408 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP
, (CHAR8
**)&mOneOf
, sizeof (EFI_IFR_ONE_OF
), TRUE
),
1409 CIfrOpHeader (EFI_IFR_ONE_OF_OP
, &mOneOf
->Header
),
1410 CIfrQuestionHeader (&mOneOf
->Question
),
1411 CIfrMinMaxStepData (&mOneOf
->data
) {
1413 gCurrentQuestion
= this;
1414 gCurrentMinMaxData
= this;
1418 gCurrentQuestion
= NULL
;
1419 gCurrentMinMaxData
= NULL
;
1422 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1423 EFI_VFR_RETURN_CODE Ret
;
1425 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1426 if (Ret
!= VFR_RETURN_SUCCESS
) {
1430 if (LFlags
& EFI_IFR_DISPLAY
) {
1431 mOneOf
->Flags
= LFlags
;
1433 mOneOf
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
1435 return VFR_RETURN_SUCCESS
;
1438 VOID
ShrinkBinSize (IN UINT16 Size
) {
1440 // Update the buffer size which is truly be used later.
1446 // Allocate buffer in gCFormPkg.
1448 _EMIT_PENDING_OBJ();
1451 // Update the buffer pointer used by other class.
1453 mOneOf
= (EFI_IFR_ONE_OF
*) GetObjBinAddr();
1454 UpdateHeader (&mOneOf
->Header
);
1455 UpdateCIfrQuestionHeader(&mOneOf
->Question
);
1456 UpdateCIfrMinMaxStepData(&mOneOf
->data
);
1460 class CIfrString
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1462 EFI_IFR_STRING
*mString
;
1465 CIfrString () : CIfrObj (EFI_IFR_STRING_OP
, (CHAR8
**)&mString
),
1466 CIfrOpHeader (EFI_IFR_STRING_OP
, &mString
->Header
),
1467 CIfrQuestionHeader (&mString
->Question
) {
1469 mString
->MinSize
= 0;
1470 mString
->MaxSize
= 0;
1471 gCurrentQuestion
= this;
1475 gCurrentQuestion
= NULL
;
1478 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1479 EFI_VFR_RETURN_CODE Ret
;
1481 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1482 if (Ret
!= VFR_RETURN_SUCCESS
) {
1486 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_STRING_MULTI_LINE
)) {
1487 mString
->Flags
|= EFI_IFR_STRING_MULTI_LINE
;
1490 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1493 VOID
SetMinSize (IN UINT8 Flags
) {
1494 mString
->MinSize
= Flags
;
1497 VOID
SetMaxSize (IN UINT8 MaxSize
) {
1498 mString
->MaxSize
= MaxSize
;
1502 class CIfrPassword
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1504 EFI_IFR_PASSWORD
*mPassword
;
1507 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP
, (CHAR8
**)&mPassword
),
1508 CIfrOpHeader (EFI_IFR_PASSWORD_OP
, &mPassword
->Header
),
1509 CIfrQuestionHeader (&mPassword
->Question
) {
1510 mPassword
->MinSize
= 0;
1511 mPassword
->MaxSize
= 0;
1512 gCurrentQuestion
= this;
1516 gCurrentQuestion
= NULL
;
1519 VOID
SetMinSize (IN UINT16 MinSize
) {
1520 mPassword
->MinSize
= MinSize
;
1523 VOID
SetMaxSize (IN UINT16 MaxSize
) {
1524 mPassword
->MaxSize
= MaxSize
;
1528 class CIfrOrderedList
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1530 EFI_IFR_ORDERED_LIST
*mOrderedList
;
1533 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP
, (CHAR8
**)&mOrderedList
),
1534 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP
, &mOrderedList
->Header
),
1535 CIfrQuestionHeader (&mOrderedList
->Question
) {
1536 mOrderedList
->MaxContainers
= 0;
1537 mOrderedList
->Flags
= 0;
1538 gCurrentQuestion
= this;
1541 ~CIfrOrderedList () {
1542 gCurrentQuestion
= NULL
;
1545 VOID
SetMaxContainers (IN UINT8 MaxContainers
) {
1546 mOrderedList
->MaxContainers
= MaxContainers
;
1549 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1550 EFI_VFR_RETURN_CODE Ret
;
1552 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1553 if (Ret
!= VFR_RETURN_SUCCESS
) {
1557 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_UNIQUE_SET
)) {
1558 mOrderedList
->Flags
|= EFI_IFR_UNIQUE_SET
;
1561 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_NO_EMPTY_SET
)) {
1562 mOrderedList
->Flags
|= EFI_IFR_NO_EMPTY_SET
;
1565 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1569 class CIfrTime
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1571 EFI_IFR_TIME
*mTime
;
1574 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP
, (CHAR8
**)&mTime
),
1575 CIfrOpHeader (EFI_IFR_TIME_OP
, &mTime
->Header
),
1576 CIfrQuestionHeader (&mTime
->Question
) {
1580 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1581 EFI_VFR_RETURN_CODE Ret
;
1583 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1584 if (Ret
!= VFR_RETURN_SUCCESS
) {
1588 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_HOUR_SUPPRESS
)) {
1589 mTime
->Flags
|= QF_TIME_HOUR_SUPPRESS
;
1592 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_MINUTE_SUPPRESS
)) {
1593 mTime
->Flags
|= QF_TIME_MINUTE_SUPPRESS
;
1596 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_SECOND_SUPPRESS
)) {
1597 mTime
->Flags
|= QF_TIME_SECOND_SUPPRESS
;
1600 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_NORMAL
)) {
1601 mTime
->Flags
|= QF_TIME_STORAGE_NORMAL
;
1602 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_TIME
)) {
1603 mTime
->Flags
|= QF_TIME_STORAGE_TIME
;
1604 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_WAKEUP
)) {
1605 mTime
->Flags
|= QF_TIME_STORAGE_WAKEUP
;
1608 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1612 class CIfrDisableIf
: public CIfrObj
, public CIfrOpHeader
{
1614 EFI_IFR_DISABLE_IF
*mDisableIf
;
1617 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP
, (CHAR8
**)&mDisableIf
),
1618 mDisableIf ((EFI_IFR_DISABLE_IF
*) GetObjBinAddr()),
1619 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP
, &mDisableIf
->Header
) {}
1622 class CIfrSuppressIf
: public CIfrObj
, public CIfrOpHeader
{
1624 EFI_IFR_SUPPRESS_IF
*mSuppressIf
;
1627 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP
, (CHAR8
**)&mSuppressIf
),
1628 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP
, &mSuppressIf
->Header
) {}
1631 class CIfrGrayOutIf
: public CIfrObj
, public CIfrOpHeader
{
1633 EFI_IFR_GRAY_OUT_IF
*mGrayOutIf
;
1636 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP
, (CHAR8
**)&mGrayOutIf
),
1637 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP
, &mGrayOutIf
->Header
) {}
1640 class CIfrInconsistentIf
: public CIfrObj
, public CIfrOpHeader
{
1642 EFI_IFR_INCONSISTENT_IF
*mInconsistentIf
;
1645 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP
, (CHAR8
**)&mInconsistentIf
),
1646 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP
, &mInconsistentIf
->Header
) {
1647 mInconsistentIf
->Error
= EFI_STRING_ID_INVALID
;
1650 VOID
SetError (IN EFI_STRING_ID Error
) {
1651 mInconsistentIf
->Error
= Error
;
1655 class CIfrWarningIf
: public CIfrObj
, public CIfrOpHeader
{
1657 EFI_IFR_WARNING_IF
*mWarningIf
;
1660 CIfrWarningIf () : CIfrObj (EFI_IFR_WARNING_IF_OP
, (CHAR8
**)&mWarningIf
),
1661 CIfrOpHeader (EFI_IFR_WARNING_IF_OP
, &mWarningIf
->Header
) {
1662 mWarningIf
->Warning
= EFI_STRING_ID_INVALID
;
1663 mWarningIf
->TimeOut
= 0;
1666 VOID
SetWarning (IN EFI_STRING_ID Warning
) {
1667 mWarningIf
->Warning
= Warning
;
1670 VOID
SetTimeOut (IN UINT8 TimeOut
) {
1671 mWarningIf
->TimeOut
= TimeOut
;
1675 class CIfrNoSubmitIf
: public CIfrObj
, public CIfrOpHeader
{
1677 EFI_IFR_NO_SUBMIT_IF
*mNoSubmitIf
;
1680 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP
, (CHAR8
**)&mNoSubmitIf
),
1681 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP
, &mNoSubmitIf
->Header
) {
1682 mNoSubmitIf
->Error
= EFI_STRING_ID_INVALID
;
1685 VOID
SetError (IN EFI_STRING_ID Error
) {
1686 mNoSubmitIf
->Error
= Error
;
1690 class CIfrRefresh
: public CIfrObj
, public CIfrOpHeader
{
1692 EFI_IFR_REFRESH
*mRefresh
;
1695 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP
, (CHAR8
**)&mRefresh
),
1696 CIfrOpHeader (EFI_IFR_REFRESH_OP
, &mRefresh
->Header
) {
1697 mRefresh
->RefreshInterval
= 0;
1700 VOID
SetRefreshInterval (IN UINT8 RefreshInterval
) {
1701 mRefresh
->RefreshInterval
= RefreshInterval
;
1705 class CIfrRefreshId
: public CIfrObj
, public CIfrOpHeader
{
1707 EFI_IFR_REFRESH_ID
*mRefreshId
;
1710 CIfrRefreshId () : CIfrObj (EFI_IFR_REFRESH_ID_OP
, (CHAR8
**)&mRefreshId
),
1711 CIfrOpHeader (EFI_IFR_REFRESH_ID_OP
, &mRefreshId
->Header
) {
1712 memset (&mRefreshId
->RefreshEventGroupId
, 0, sizeof (EFI_GUID
));
1715 VOID
SetRefreshEventGroutId (IN EFI_GUID
*RefreshEventGroupId
) {
1716 memmove (&mRefreshId
->RefreshEventGroupId
, RefreshEventGroupId
, sizeof (EFI_GUID
));
1720 class CIfrVarStoreDevice
: public CIfrObj
, public CIfrOpHeader
{
1722 EFI_IFR_VARSTORE_DEVICE
*mVarStoreDevice
;
1725 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP
, (CHAR8
**)&mVarStoreDevice
),
1726 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP
, &mVarStoreDevice
->Header
) {
1727 mVarStoreDevice
->DevicePath
= EFI_STRING_ID_INVALID
;
1730 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1731 mVarStoreDevice
->DevicePath
= DevicePath
;
1735 class CIfrOneOfOption
: public CIfrObj
, public CIfrOpHeader
{
1737 EFI_IFR_ONE_OF_OPTION
*mOneOfOption
;
1740 CIfrOneOfOption (UINT8 Size
) : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP
, (CHAR8
**)&mOneOfOption
, Size
),
1741 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP
, &mOneOfOption
->Header
, Size
) {
1742 mOneOfOption
->Flags
= 0;
1743 mOneOfOption
->Option
= EFI_STRING_ID_INVALID
;
1744 mOneOfOption
->Type
= EFI_IFR_TYPE_OTHER
;
1745 memset (&mOneOfOption
->Value
, 0, Size
- OFFSET_OF (EFI_IFR_ONE_OF_OPTION
, Value
));
1748 VOID
SetOption (IN EFI_STRING_ID Option
) {
1749 mOneOfOption
->Option
= Option
;
1752 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1753 mOneOfOption
->Flags
= 0;
1754 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT
)) {
1755 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT
;
1758 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT_MFG
)) {
1759 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT_MFG
;
1762 if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
)) {
1763 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
);
1764 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_8
;
1765 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
)) {
1766 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
);
1767 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_16
;
1768 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
)) {
1769 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
);
1770 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_32
;
1771 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
)) {
1772 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
);
1773 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_64
;
1774 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_BOOLEAN
)) {
1775 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_BOOLEAN
);
1776 mOneOfOption
->Flags
|= EFI_IFR_TYPE_BOOLEAN
;
1777 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_TIME
)) {
1778 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_TIME
);
1779 mOneOfOption
->Flags
|= EFI_IFR_TYPE_TIME
;
1780 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_DATE
)) {
1781 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_DATE
);
1782 mOneOfOption
->Flags
|= EFI_IFR_TYPE_DATE
;
1783 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_STRING
)) {
1784 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_STRING
);
1785 mOneOfOption
->Flags
|= EFI_IFR_TYPE_STRING
;
1786 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_OTHER
)) {
1787 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_OTHER
);
1788 mOneOfOption
->Flags
|= EFI_IFR_TYPE_OTHER
;
1791 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1794 VOID
SetType (IN UINT8 Type
) {
1795 mOneOfOption
->Type
= Type
;
1798 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
1799 memmove (&mOneOfOption
->Value
, &Value
, mOneOfOption
->Header
.Length
- OFFSET_OF (EFI_IFR_ONE_OF_OPTION
, Value
));
1802 UINT8
GetFlags (VOID
) {
1803 return mOneOfOption
->Flags
;
1807 static EFI_GUID IfrTianoGuid
= EFI_IFR_TIANO_GUID
;
1808 static EFI_GUID IfrFrameworkGuid
= EFI_IFR_FRAMEWORK_GUID
;
1810 class CIfrClass
: public CIfrObj
, public CIfrOpHeader
{
1812 EFI_IFR_GUID_CLASS
*mClass
;
1815 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mClass
, sizeof (EFI_IFR_GUID_CLASS
)),
1816 CIfrOpHeader (EFI_IFR_GUID_OP
, &mClass
->Header
, sizeof (EFI_IFR_GUID_CLASS
)) {
1817 mClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_CLASS
;
1818 mClass
->Guid
= IfrTianoGuid
;
1819 mClass
->Class
= EFI_NON_DEVICE_CLASS
;
1822 VOID
SetClass (IN UINT16 Class
) {
1823 mClass
->Class
= Class
;
1827 class CIfrSubClass
: public CIfrObj
, public CIfrOpHeader
{
1829 EFI_IFR_GUID_SUBCLASS
*mSubClass
;
1832 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mSubClass
, sizeof (EFI_IFR_GUID_SUBCLASS
)),
1833 CIfrOpHeader (EFI_IFR_GUID_OP
, &mSubClass
->Header
, sizeof (EFI_IFR_GUID_SUBCLASS
)) {
1834 mSubClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_SUBCLASS
;
1835 mSubClass
->Guid
= IfrTianoGuid
;
1836 mSubClass
->SubClass
= EFI_SETUP_APPLICATION_SUBCLASS
;
1839 VOID
SetSubClass (IN UINT16 SubClass
) {
1840 mSubClass
->SubClass
= SubClass
;
1844 class CIfrLabel
: public CIfrObj
, public CIfrOpHeader
{
1846 EFI_IFR_GUID_LABEL
*mLabel
;
1849 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mLabel
, sizeof (EFI_IFR_GUID_LABEL
)),
1850 CIfrOpHeader (EFI_IFR_GUID_OP
, &mLabel
->Header
, sizeof (EFI_IFR_GUID_LABEL
)) {
1851 mLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1852 mLabel
->Guid
= IfrTianoGuid
;
1855 VOID
SetNumber (IN UINT16 Number
) {
1856 mLabel
->Number
= Number
;
1860 class CIfrBanner
: public CIfrObj
, public CIfrOpHeader
{
1862 EFI_IFR_GUID_BANNER
*mBanner
;
1865 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mBanner
, sizeof (EFI_IFR_GUID_BANNER
)),
1866 CIfrOpHeader (EFI_IFR_GUID_OP
, &mBanner
->Header
, sizeof (EFI_IFR_GUID_BANNER
)) {
1867 mBanner
->ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
1868 mBanner
->Guid
= IfrTianoGuid
;
1871 VOID
SetTitle (IN EFI_STRING_ID StringId
) {
1872 mBanner
->Title
= StringId
;
1875 VOID
SetLine (IN UINT16 Line
) {
1876 mBanner
->LineNumber
= Line
;
1879 VOID
SetAlign (IN UINT8 Align
) {
1880 mBanner
->Alignment
= Align
;
1884 class CIfrOptionKey
: public CIfrObj
, public CIfrOpHeader
{
1886 EFI_IFR_GUID_OPTIONKEY
*mOptionKey
;
1890 IN EFI_QUESTION_ID QuestionId
,
1891 IN EFI_IFR_TYPE_VALUE
&OptionValue
,
1892 IN EFI_QUESTION_ID KeyValue
1893 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mOptionKey
, sizeof (EFI_IFR_GUID_OPTIONKEY
)),
1894 CIfrOpHeader (EFI_IFR_GUID_OP
, &mOptionKey
->Header
, sizeof (EFI_IFR_GUID_OPTIONKEY
)) {
1895 mOptionKey
->ExtendOpCode
= EFI_IFR_EXTEND_OP_OPTIONKEY
;
1896 mOptionKey
->Guid
= IfrFrameworkGuid
;
1897 mOptionKey
->QuestionId
= QuestionId
;
1898 mOptionKey
->OptionValue
= OptionValue
;
1899 mOptionKey
->KeyValue
= KeyValue
;
1903 class CIfrVarEqName
: public CIfrObj
, public CIfrOpHeader
{
1905 EFI_IFR_GUID_VAREQNAME
*mVarEqName
;
1909 IN EFI_QUESTION_ID QuestionId
,
1910 IN EFI_STRING_ID NameId
1911 ) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mVarEqName
, sizeof (EFI_IFR_GUID_VAREQNAME
)),
1912 CIfrOpHeader (EFI_IFR_GUID_OP
, &mVarEqName
->Header
, sizeof (EFI_IFR_GUID_VAREQNAME
)) {
1913 mVarEqName
->ExtendOpCode
= EFI_IFR_EXTEND_OP_VAREQNAME
;
1914 mVarEqName
->Guid
= IfrFrameworkGuid
;
1915 mVarEqName
->QuestionId
= QuestionId
;
1916 mVarEqName
->NameId
= NameId
;
1920 class CIfrTimeout
: public CIfrObj
, public CIfrOpHeader
{
1922 EFI_IFR_GUID_TIMEOUT
*mTimeout
;
1925 CIfrTimeout (IN UINT16 Timeout
= 0) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mTimeout
, sizeof (EFI_IFR_GUID_TIMEOUT
)),
1926 CIfrOpHeader (EFI_IFR_GUID_OP
, &mTimeout
->Header
, sizeof (EFI_IFR_GUID_TIMEOUT
)) {
1927 mTimeout
->ExtendOpCode
= EFI_IFR_EXTEND_OP_TIMEOUT
;
1928 mTimeout
->Guid
= IfrTianoGuid
;
1929 mTimeout
->TimeOut
= Timeout
;
1932 VOID
SetTimeout (IN UINT16 Timeout
) {
1933 mTimeout
->TimeOut
= Timeout
;
1937 class CIfrGuid
: public CIfrObj
, public CIfrOpHeader
{
1939 EFI_IFR_GUID
*mGuid
;
1942 CIfrGuid (UINT8 Size
) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mGuid
, sizeof (EFI_IFR_GUID
)+Size
),
1943 CIfrOpHeader (EFI_IFR_GUID_OP
, &mGuid
->Header
, sizeof (EFI_IFR_GUID
)+Size
) {
1944 memset (&mGuid
->Guid
, 0, sizeof (EFI_GUID
));
1947 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1948 memmove (&mGuid
->Guid
, Guid
, sizeof (EFI_GUID
));
1951 VOID
SetData (IN UINT8
* DataBuff
, IN UINT8 Size
) {
1952 memmove ((UINT8
*)mGuid
+ sizeof (EFI_IFR_GUID
), DataBuff
, Size
);
1956 class CIfrDup
: public CIfrObj
, public CIfrOpHeader
{
1963 ) : CIfrObj (EFI_IFR_DUP_OP
, (CHAR8
**)&mDup
),
1964 CIfrOpHeader (EFI_IFR_DUP_OP
, &mDup
->Header
) {
1969 class CIfrEqIdId
: public CIfrObj
, public CIfrOpHeader
{
1971 EFI_IFR_EQ_ID_ID
*mEqIdId
;
1976 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP
, (CHAR8
**)&mEqIdId
),
1977 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP
, &mEqIdId
->Header
) {
1979 mEqIdId
->QuestionId1
= EFI_QUESTION_ID_INVALID
;
1980 mEqIdId
->QuestionId2
= EFI_QUESTION_ID_INVALID
;
1983 VOID
SetQuestionId1 (
1984 IN EFI_QUESTION_ID QuestionId
,
1988 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1989 mEqIdId
->QuestionId1
= QuestionId
;
1991 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId1
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
1995 VOID
SetQuestionId2 (
1996 IN EFI_QUESTION_ID QuestionId
,
2000 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
2001 mEqIdId
->QuestionId2
= QuestionId
;
2003 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId2
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
2008 class CIfrEqIdVal
: public CIfrObj
, public CIfrOpHeader
{
2010 EFI_IFR_EQ_ID_VAL
*mEqIdVal
;
2015 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP
, (CHAR8
**)&mEqIdVal
),
2016 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP
, &mEqIdVal
->Header
) {
2018 mEqIdVal
->QuestionId
= EFI_QUESTION_ID_INVALID
;
2021 VOID
SetQuestionId (
2022 IN EFI_QUESTION_ID QuestionId
,
2026 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
2027 mEqIdVal
->QuestionId
= QuestionId
;
2029 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVal
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
2033 VOID
SetValue (IN UINT16 Value
) {
2034 mEqIdVal
->Value
= Value
;
2038 class CIfrEqIdList
: public CIfrObj
, public CIfrOpHeader
{
2040 EFI_IFR_EQ_ID_VAL_LIST
*mEqIdVList
;
2045 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_LIST_OP
, (CHAR8
**)&mEqIdVList
, sizeof (EFI_IFR_EQ_ID_VAL_LIST
), TRUE
),
2046 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_LIST_OP
, &mEqIdVList
->Header
) {
2048 mEqIdVList
->QuestionId
= EFI_QUESTION_ID_INVALID
;
2049 mEqIdVList
->ListLength
= 0;
2050 mEqIdVList
->ValueList
[0] = 0;
2053 VOID
UpdateIfrBuffer (
2055 _EMIT_PENDING_OBJ();
2056 mEqIdVList
= (EFI_IFR_EQ_ID_VAL_LIST
*) GetObjBinAddr();
2057 UpdateHeader (&mEqIdVList
->Header
);
2060 VOID
SetQuestionId (
2061 IN EFI_QUESTION_ID QuestionId
,
2065 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
2066 mEqIdVList
->QuestionId
= QuestionId
;
2068 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVList
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
2072 VOID
SetListLength (IN UINT16 ListLength
) {
2073 mEqIdVList
->ListLength
= ListLength
;
2076 VOID
SetValueList (IN UINT16 Index
, IN UINT16 Value
) {
2078 mEqIdVList
->ValueList
[0] = Value
;
2082 if (ExpendObjBin (sizeof (UINT16
)) ==TRUE
) {
2083 IncLength (sizeof (UINT16
));
2084 mEqIdVList
->ValueList
[Index
] = Value
;
2089 class CIfrQuestionRef1
: public CIfrObj
, public CIfrOpHeader
{
2091 EFI_IFR_QUESTION_REF1
*mQuestionRef1
;
2096 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP
, (CHAR8
**)&mQuestionRef1
),
2097 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP
, &mQuestionRef1
->Header
) {
2099 mQuestionRef1
->QuestionId
= EFI_QUESTION_ID_INVALID
;
2102 VOID
SetQuestionId (
2103 IN EFI_QUESTION_ID QuestionId
,
2107 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
2108 mQuestionRef1
->QuestionId
= QuestionId
;
2110 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mQuestionRef1
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
, NO_QST_REFED
);
2115 class CIfrQuestionRef2
: public CIfrObj
, public CIfrOpHeader
{
2117 EFI_IFR_QUESTION_REF2
*mQuestionRef2
;
2122 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP
, (CHAR8
**)&mQuestionRef2
),
2123 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP
, &mQuestionRef2
->Header
) {
2128 class CIfrQuestionRef3
: public CIfrObj
, public CIfrOpHeader
{
2130 EFI_IFR_QUESTION_REF3
*mQuestionRef3
;
2135 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3
),
2136 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3
->Header
) {
2141 class CIfrQuestionRef3_2
: public CIfrObj
, public CIfrOpHeader
{
2143 EFI_IFR_QUESTION_REF3_2
*mQuestionRef3_2
;
2146 CIfrQuestionRef3_2 (
2148 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_2
, sizeof (EFI_IFR_QUESTION_REF3_2
)),
2149 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_2
->Header
, sizeof (EFI_IFR_QUESTION_REF3_2
)) {
2151 mQuestionRef3_2
->DevicePath
= EFI_STRING_ID_INVALID
;
2154 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
2155 mQuestionRef3_2
->DevicePath
= DevicePath
;
2159 class CIfrQuestionRef3_3
: public CIfrObj
, public CIfrOpHeader
{
2161 EFI_IFR_QUESTION_REF3_3
*mQuestionRef3_3
;
2164 CIfrQuestionRef3_3 (
2166 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_3
, sizeof (EFI_IFR_QUESTION_REF3_3
)),
2167 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_3
->Header
, sizeof (EFI_IFR_QUESTION_REF3_3
)) {
2169 mQuestionRef3_3
->DevicePath
= EFI_STRING_ID_INVALID
;
2170 memset (&mQuestionRef3_3
->Guid
, 0, sizeof (EFI_GUID
));
2173 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
2174 mQuestionRef3_3
->DevicePath
= DevicePath
;
2177 VOID
SetGuid (IN EFI_GUID
*Guid
) {
2178 mQuestionRef3_3
->Guid
= *Guid
;
2182 class CIfrRuleRef
: public CIfrObj
, public CIfrOpHeader
{
2184 EFI_IFR_RULE_REF
*mRuleRef
;
2189 ) : CIfrObj (EFI_IFR_RULE_REF_OP
, (CHAR8
**)&mRuleRef
),
2190 CIfrOpHeader (EFI_IFR_RULE_REF_OP
, &mRuleRef
->Header
) {
2192 mRuleRef
->RuleId
= EFI_RULE_ID_INVALID
;
2195 VOID
SetRuleId (IN UINT8 RuleId
) {
2196 mRuleRef
->RuleId
= RuleId
;
2200 class CIfrStringRef1
: public CIfrObj
, public CIfrOpHeader
{
2202 EFI_IFR_STRING_REF1
*mStringRef1
;
2207 ) : CIfrObj (EFI_IFR_STRING_REF1_OP
, (CHAR8
**)&mStringRef1
),
2208 CIfrOpHeader (EFI_IFR_STRING_REF1_OP
, &mStringRef1
->Header
) {
2210 mStringRef1
->StringId
= EFI_STRING_ID_INVALID
;
2213 VOID
SetStringId (IN EFI_STRING_ID StringId
) {
2214 mStringRef1
->StringId
= StringId
;
2218 class CIfrStringRef2
: public CIfrObj
, public CIfrOpHeader
{
2220 EFI_IFR_STRING_REF2
*mStringRef2
;
2225 ) : CIfrObj (EFI_IFR_STRING_REF2_OP
, (CHAR8
**)&mStringRef2
),
2226 CIfrOpHeader (EFI_IFR_STRING_REF2_OP
, &mStringRef2
->Header
) {
2231 class CIfrThis
: public CIfrObj
, public CIfrOpHeader
{
2233 EFI_IFR_THIS
*mThis
;
2238 ) : CIfrObj (EFI_IFR_THIS_OP
, (CHAR8
**)&mThis
),
2239 CIfrOpHeader (EFI_IFR_THIS_OP
, &mThis
->Header
) {
2244 class CIfrSecurity
: public CIfrObj
, public CIfrOpHeader
{
2246 EFI_IFR_SECURITY
*mSecurity
;
2251 ) : CIfrObj (EFI_IFR_SECURITY_OP
, (CHAR8
**)&mSecurity
),
2252 CIfrOpHeader (EFI_IFR_SECURITY_OP
, &mSecurity
->Header
) {
2254 memset (&mSecurity
->Permissions
, 0, sizeof (EFI_GUID
));
2257 VOID
SetPermissions (IN EFI_GUID
*Permissions
) {
2258 memmove (&mSecurity
->Permissions
, Permissions
, sizeof (EFI_GUID
));
2262 class CIfrUint8
: public CIfrObj
, public CIfrOpHeader
{
2264 EFI_IFR_UINT8
*mUint8
;
2269 ) : CIfrObj (EFI_IFR_UINT8_OP
, (CHAR8
**)&mUint8
),
2270 CIfrOpHeader (EFI_IFR_UINT8_OP
, &mUint8
->Header
) {
2274 VOID
SetValue (IN UINT8 Value
) {
2275 mUint8
->Value
= Value
;
2279 class CIfrUint16
: public CIfrObj
, public CIfrOpHeader
{
2281 EFI_IFR_UINT16
*mUint16
;
2286 ) : CIfrObj (EFI_IFR_UINT16_OP
, (CHAR8
**)&mUint16
),
2287 CIfrOpHeader (EFI_IFR_UINT16_OP
, &mUint16
->Header
) {
2291 VOID
SetValue (IN UINT16 Value
) {
2292 mUint16
->Value
= Value
;
2296 class CIfrUint32
: public CIfrObj
, public CIfrOpHeader
{
2298 EFI_IFR_UINT32
*mUint32
;
2303 ) : CIfrObj (EFI_IFR_UINT32_OP
, (CHAR8
**)&mUint32
),
2304 CIfrOpHeader (EFI_IFR_UINT32_OP
, &mUint32
->Header
) {
2308 VOID
SetValue (IN UINT32 Value
) {
2309 mUint32
->Value
= Value
;
2313 class CIfrUint64
: public CIfrObj
, public CIfrOpHeader
{
2315 EFI_IFR_UINT64
*mUint64
;
2320 ) : CIfrObj (EFI_IFR_UINT64_OP
, (CHAR8
**)&mUint64
),
2321 CIfrOpHeader (EFI_IFR_UINT64_OP
, &mUint64
->Header
) {
2325 VOID
SetValue (IN UINT64 Value
) {
2326 mUint64
->Value
= Value
;
2330 class CIfrTrue
: public CIfrObj
, public CIfrOpHeader
{
2332 EFI_IFR_TRUE
*mTrue
;
2337 ) : CIfrObj (EFI_IFR_TRUE_OP
, (CHAR8
**)&mTrue
),
2338 CIfrOpHeader (EFI_IFR_TRUE_OP
, &mTrue
->Header
) {
2343 class CIfrFalse
: public CIfrObj
, public CIfrOpHeader
{
2345 EFI_IFR_FALSE
*mFalse
;
2350 ) : CIfrObj (EFI_IFR_FALSE_OP
, (CHAR8
**)&mFalse
),
2351 CIfrOpHeader (EFI_IFR_FALSE_OP
, &mFalse
->Header
) {
2356 class CIfrOne
: public CIfrObj
, public CIfrOpHeader
{
2363 ) : CIfrObj (EFI_IFR_ONE_OP
, (CHAR8
**)&mOne
),
2364 CIfrOpHeader (EFI_IFR_ONE_OP
, &mOne
->Header
) {
2369 class CIfrOnes
: public CIfrObj
, public CIfrOpHeader
{
2371 EFI_IFR_ONES
*mOnes
;
2376 ) : CIfrObj (EFI_IFR_ONES_OP
, (CHAR8
**)&mOnes
),
2377 CIfrOpHeader (EFI_IFR_ONES_OP
, &mOnes
->Header
) {
2382 class CIfrZero
: public CIfrObj
, public CIfrOpHeader
{
2384 EFI_IFR_ZERO
*mZero
;
2389 ) : CIfrObj (EFI_IFR_ZERO_OP
, (CHAR8
**)&mZero
),
2390 CIfrOpHeader (EFI_IFR_ZERO_OP
, &mZero
->Header
) {
2395 class CIfrUndefined
: public CIfrObj
, public CIfrOpHeader
{
2397 EFI_IFR_UNDEFINED
*mUndefined
;
2402 ) : CIfrObj (EFI_IFR_UNDEFINED_OP
, (CHAR8
**)&mUndefined
),
2403 CIfrOpHeader (EFI_IFR_UNDEFINED_OP
, &mUndefined
->Header
) {
2408 class CIfrVersion
: public CIfrObj
, public CIfrOpHeader
{
2410 EFI_IFR_VERSION
*mVersion
;
2415 ) : CIfrObj (EFI_IFR_VERSION_OP
, (CHAR8
**)&mVersion
),
2416 CIfrOpHeader (EFI_IFR_VERSION_OP
, &mVersion
->Header
) {
2421 class CIfrLength
: public CIfrObj
, public CIfrOpHeader
{
2423 EFI_IFR_LENGTH
*mLength
;
2428 ) : CIfrObj (EFI_IFR_LENGTH_OP
, (CHAR8
**)&mLength
),
2429 CIfrOpHeader (EFI_IFR_LENGTH_OP
, &mLength
->Header
) {
2434 class CIfrNot
: public CIfrObj
, public CIfrOpHeader
{
2441 ) : CIfrObj (EFI_IFR_NOT_OP
, (CHAR8
**)&mNot
),
2442 CIfrOpHeader (EFI_IFR_NOT_OP
, &mNot
->Header
) {
2447 class CIfrBitWiseNot
: public CIfrObj
, public CIfrOpHeader
{
2449 EFI_IFR_BITWISE_NOT
*mBitWise
;
2454 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP
, (CHAR8
**)&mBitWise
),
2455 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP
, &mBitWise
->Header
) {
2460 class CIfrToBoolean
: public CIfrObj
, public CIfrOpHeader
{
2462 EFI_IFR_TO_BOOLEAN
*mToBoolean
;
2467 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP
, (CHAR8
**)&mToBoolean
),
2468 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP
, &mToBoolean
->Header
) {
2473 class CIfrToString
: public CIfrObj
, public CIfrOpHeader
{
2475 EFI_IFR_TO_STRING
*mToString
;
2480 ) : CIfrObj (EFI_IFR_TO_STRING_OP
, (CHAR8
**)&mToString
),
2481 CIfrOpHeader (EFI_IFR_TO_STRING_OP
, &mToString
->Header
) {
2485 VOID
SetFormat (IN UINT8 Format
) {
2486 mToString
->Format
= Format
;
2490 class CIfrToUint
: public CIfrObj
, public CIfrOpHeader
{
2492 EFI_IFR_TO_UINT
*mToUint
;
2497 ) : CIfrObj (EFI_IFR_TO_UINT_OP
, (CHAR8
**)&mToUint
),
2498 CIfrOpHeader (EFI_IFR_TO_UINT_OP
, &mToUint
->Header
) {
2503 class CIfrToUpper
: public CIfrObj
, public CIfrOpHeader
{
2505 EFI_IFR_TO_UPPER
*mToUpper
;
2510 ) : CIfrObj (EFI_IFR_TO_UPPER_OP
, (CHAR8
**)&mToUpper
),
2511 CIfrOpHeader (EFI_IFR_TO_UPPER_OP
, &mToUpper
->Header
) {
2516 class CIfrToLower
: public CIfrObj
, public CIfrOpHeader
{
2518 EFI_IFR_TO_LOWER
*mToLower
;
2523 ) : CIfrObj (EFI_IFR_TO_LOWER_OP
, (CHAR8
**)&mToLower
),
2524 CIfrOpHeader (EFI_IFR_TO_LOWER_OP
, &mToLower
->Header
) {
2529 class CIfrAdd
: public CIfrObj
, public CIfrOpHeader
{
2536 ) : CIfrObj (EFI_IFR_ADD_OP
, (CHAR8
**)&mAdd
),
2537 CIfrOpHeader (EFI_IFR_ADD_OP
, &mAdd
->Header
) {
2542 class CIfrBitWiseAnd
: public CIfrObj
, public CIfrOpHeader
{
2544 EFI_IFR_BITWISE_AND
*mBitWiseAnd
;
2549 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP
, (CHAR8
**)&mBitWiseAnd
),
2550 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP
, &mBitWiseAnd
->Header
) {
2555 class CIfrBitWiseOr
: public CIfrObj
, public CIfrOpHeader
{
2557 EFI_IFR_BITWISE_OR
*mBitWiseOr
;
2562 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP
, (CHAR8
**)&mBitWiseOr
),
2563 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP
, &mBitWiseOr
->Header
) {
2568 class CIfrAnd
: public CIfrObj
, public CIfrOpHeader
{
2575 ) : CIfrObj (EFI_IFR_AND_OP
, (CHAR8
**)&mAnd
),
2576 CIfrOpHeader (EFI_IFR_AND_OP
, &mAnd
->Header
) {
2581 class CIfrCatenate
: public CIfrObj
, public CIfrOpHeader
{
2583 EFI_IFR_CATENATE
*mCatenate
;
2588 ) : CIfrObj (EFI_IFR_CATENATE_OP
, (CHAR8
**)&mCatenate
),
2589 CIfrOpHeader (EFI_IFR_CATENATE_OP
, &mCatenate
->Header
) {
2594 class CIfrDivide
: public CIfrObj
, public CIfrOpHeader
{
2596 EFI_IFR_DIVIDE
*mDivide
;
2601 ) : CIfrObj (EFI_IFR_DIVIDE_OP
, (CHAR8
**)&mDivide
),
2602 CIfrOpHeader (EFI_IFR_DIVIDE_OP
, &mDivide
->Header
) {
2607 class CIfrEqual
: public CIfrObj
, public CIfrOpHeader
{
2609 EFI_IFR_EQUAL
*mEqual
;
2614 ) : CIfrObj (EFI_IFR_EQUAL_OP
, (CHAR8
**)&mEqual
),
2615 CIfrOpHeader (EFI_IFR_EQUAL_OP
, &mEqual
->Header
) {
2620 class CIfrGreaterEqual
: public CIfrObj
, public CIfrOpHeader
{
2622 EFI_IFR_GREATER_EQUAL
*mGreaterEqual
;
2627 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP
, (CHAR8
**)&mGreaterEqual
),
2628 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP
, &mGreaterEqual
->Header
) {
2633 class CIfrGreaterThan
: public CIfrObj
, public CIfrOpHeader
{
2635 EFI_IFR_GREATER_THAN
*mGreaterThan
;
2640 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP
, (CHAR8
**)&mGreaterThan
),
2641 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP
, &mGreaterThan
->Header
) {
2646 class CIfrLessEqual
: public CIfrObj
, public CIfrOpHeader
{
2648 EFI_IFR_LESS_EQUAL
*mLessEqual
;
2653 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP
, (CHAR8
**)&mLessEqual
),
2654 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP
, &mLessEqual
->Header
) {
2659 class CIfrLessThan
: public CIfrObj
, public CIfrOpHeader
{
2661 EFI_IFR_LESS_THAN
*mLessThan
;
2666 ) : CIfrObj (EFI_IFR_LESS_THAN_OP
, (CHAR8
**)&mLessThan
),
2667 CIfrOpHeader (EFI_IFR_LESS_THAN_OP
, &mLessThan
->Header
) {
2672 class CIfrMap
: public CIfrObj
, public CIfrOpHeader
{
2679 ) : CIfrObj (EFI_IFR_MAP_OP
, (CHAR8
**)&mMap
),
2680 CIfrOpHeader (EFI_IFR_MAP_OP
, &mMap
->Header
) {
2685 class CIfrMatch
: public CIfrObj
, public CIfrOpHeader
{
2687 EFI_IFR_MATCH
*mMatch
;
2692 ) : CIfrObj (EFI_IFR_MATCH_OP
, (CHAR8
**)&mMatch
),
2693 CIfrOpHeader (EFI_IFR_MATCH_OP
, &mMatch
->Header
) {
2698 class CIfrMatch2
: public CIfrObj
, public CIfrOpHeader
{
2700 EFI_IFR_MATCH2
*mMatch2
;
2706 ) : CIfrObj (EFI_IFR_MATCH2_OP
, (CHAR8
**)&mMatch2
),
2707 CIfrOpHeader (EFI_IFR_MATCH2_OP
, &mMatch2
->Header
) {
2709 memmove (&mMatch2
->SyntaxType
, Guid
, sizeof (EFI_GUID
));
2713 class CIfrMultiply
: public CIfrObj
, public CIfrOpHeader
{
2715 EFI_IFR_MULTIPLY
*mMultiply
;
2720 ) : CIfrObj (EFI_IFR_MULTIPLY_OP
, (CHAR8
**)&mMultiply
),
2721 CIfrOpHeader (EFI_IFR_MULTIPLY_OP
, &mMultiply
->Header
) {
2726 class CIfrModulo
: public CIfrObj
, public CIfrOpHeader
{
2728 EFI_IFR_MODULO
*mModulo
;
2733 ) : CIfrObj (EFI_IFR_MODULO_OP
, (CHAR8
**)&mModulo
),
2734 CIfrOpHeader (EFI_IFR_MODULO_OP
, &mModulo
->Header
) {
2739 class CIfrNotEqual
: public CIfrObj
, public CIfrOpHeader
{
2741 EFI_IFR_NOT_EQUAL
*mNotEqual
;
2746 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP
, (CHAR8
**)&mNotEqual
),
2747 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP
, &mNotEqual
->Header
) {
2752 class CIfrOr
: public CIfrObj
, public CIfrOpHeader
{
2759 ) : CIfrObj (EFI_IFR_OR_OP
, (CHAR8
**)&mOr
),
2760 CIfrOpHeader (EFI_IFR_OR_OP
, &mOr
->Header
) {
2765 class CIfrShiftLeft
: public CIfrObj
, public CIfrOpHeader
{
2767 EFI_IFR_SHIFT_LEFT
*mShiftLeft
;
2772 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP
, (CHAR8
**)&mShiftLeft
),
2773 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP
, &mShiftLeft
->Header
) {
2778 class CIfrShiftRight
: public CIfrObj
, public CIfrOpHeader
{
2780 EFI_IFR_SHIFT_RIGHT
*mShiftRight
;
2785 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP
, (CHAR8
**)&mShiftRight
),
2786 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP
, &mShiftRight
->Header
) {
2791 class CIfrSubtract
: public CIfrObj
, public CIfrOpHeader
{
2793 EFI_IFR_SUBTRACT
*mSubtract
;
2798 ) : CIfrObj (EFI_IFR_SUBTRACT_OP
, (CHAR8
**)&mSubtract
),
2799 CIfrOpHeader (EFI_IFR_SUBTRACT_OP
, &mSubtract
->Header
) {
2804 class CIfrConditional
: public CIfrObj
, public CIfrOpHeader
{
2806 EFI_IFR_CONDITIONAL
*mConditional
;
2811 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP
, (CHAR8
**)&mConditional
),
2812 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP
, &mConditional
->Header
) {
2817 class CIfrFind
: public CIfrObj
, public CIfrOpHeader
{
2819 EFI_IFR_FIND
*mFind
;
2824 ) : CIfrObj (EFI_IFR_FIND_OP
, (CHAR8
**)&mFind
),
2825 CIfrOpHeader (EFI_IFR_FIND_OP
, &mFind
->Header
) {
2829 VOID
SetFormat (IN UINT8 Format
) {
2830 mFind
->Format
= Format
;
2834 class CIfrMid
: public CIfrObj
, public CIfrOpHeader
{
2841 ) : CIfrObj (EFI_IFR_MID_OP
, (CHAR8
**)&mMid
),
2842 CIfrOpHeader (EFI_IFR_MID_OP
, &mMid
->Header
) {
2847 class CIfrToken
: public CIfrObj
, public CIfrOpHeader
{
2849 EFI_IFR_TOKEN
*mToken
;
2854 ) : CIfrObj (EFI_IFR_TOKEN_OP
, (CHAR8
**)&mToken
),
2855 CIfrOpHeader (EFI_IFR_TOKEN_OP
, &mToken
->Header
) {
2860 class CIfrSpan
: public CIfrObj
, public CIfrOpHeader
{
2862 EFI_IFR_SPAN
*mSpan
;
2867 ) : CIfrObj (EFI_IFR_SPAN_OP
, (CHAR8
**)&mSpan
),
2868 CIfrOpHeader (EFI_IFR_SPAN_OP
, &mSpan
->Header
) {
2870 mSpan
->Flags
= EFI_IFR_FLAGS_FIRST_MATCHING
;
2873 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
2874 if (_IS_EQUAL (LFlags
, EFI_IFR_FLAGS_FIRST_MATCHING
)) {
2875 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_MATCHING
;
2876 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_FIRST_NON_MATCHING
)) {
2877 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_NON_MATCHING
;
2880 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;