3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 #ifndef _EFIIFRCLASS_H_
21 #define _EFIIFRCLASS_H_
26 #include "VfrUtilityLib.h"
29 * The functions below are used for flags setting
31 static inline BOOLEAN
_FLAGS_ZERO (
38 static inline VOID
_FLAG_CLEAR (
46 static inline UINT8
_FLAG_TEST_AND_CLEAR (
51 UINT8 Ret
= Flags
& Mask
;
56 static inline UINT8
_IS_EQUAL (
61 return Flags
== Value
;
65 * The definition of CIfrBin
72 struct SPendingAssign
{
73 INT8
*mKey
; // key ! unique
78 struct SPendingAssign
*mNext
;
80 SPendingAssign (IN INT8
*, IN VOID
*, IN UINT32
, IN UINT32
);
83 VOID
SetAddrAndLen (IN VOID
*, IN UINT32
);
84 VOID
AssignValue (IN VOID
*, IN UINT32
);
92 struct SBufferNode
*mNext
;
98 SBufferNode
*mBufferNodeQueueHead
;
99 SBufferNode
*mBufferNodeQueueTail
;
100 SBufferNode
*mCurrBufferNode
;
102 SBufferNode
*mReadBufferNode
;
103 UINT32 mReadBufferOffset
;
107 VOID
_WRITE_PKG_LINE (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
108 VOID
_WRITE_PKG_END (IN
FILE *, IN UINT32
, IN INT8
*, IN INT8
*, IN UINT32
);
111 SPendingAssign
*PendingAssignList
;
114 CFormPkg (IN UINT32 BufferSize
);
117 CHAR8
* IfrBinBufferGet (IN UINT32
);
118 inline UINT32
GetPkgLength (VOID
);
121 UINT32
Read (IN CHAR8
*, IN UINT32
);
124 EFI_VFR_RETURN_CODE
BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER
**);
125 EFI_VFR_RETURN_CODE
BuildPkg (IN
FILE *);
126 EFI_VFR_RETURN_CODE
GenCFile (IN INT8
*, IN
FILE *);
129 EFI_VFR_RETURN_CODE
AssignPending (IN INT8
*, IN VOID
*, IN UINT32
, IN UINT32
);
130 VOID
DoPendingAssign (IN INT8
*, IN VOID
*, IN UINT32
);
131 bool HavePendingUnassigned (VOID
);
132 VOID
PendingAssignPrintAll (VOID
);
135 extern CFormPkg gCFormPkg
;
148 #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
149 #define EFI_IFR_RECORDINFO_IDX_START 0x0
151 class CIfrRecordInfoDB
{
155 SIfrRecord
*mIfrRecordListHead
;
156 SIfrRecord
*mIfrRecordListTail
;
158 SIfrRecord
* GetRecordInfoFromIdx (IN UINT32
);
160 CIfrRecordInfoDB (VOID
);
161 ~CIfrRecordInfoDB (VOID
);
163 inline VOID
TurnOn (VOID
) {
167 inline VOID
TurnOff (VOID
) {
171 UINT32
IfrRecordRegister (IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
172 VOID
IfrRecordInfoUpdate (IN UINT32
, IN UINT32
, IN CHAR8
*, IN UINT8
, IN UINT32
);
173 VOID
IfrRecordOutput (IN
FILE *, IN UINT32 LineNo
);
176 extern CIfrRecordInfoDB gCIfrRecordInfoDB
;
179 * The definition of CIfrObj
181 extern bool gCreateOp
;
193 VOID
_EMIT_PENDING_OBJ (VOID
);
196 CIfrObj (IN UINT8 OpCode
, OUT CHAR8
**IfrObj
= NULL
, IN UINT8 ObjBinLen
= 0, IN BOOLEAN DelayEmit
= FALSE
);
197 virtual ~CIfrObj(VOID
);
199 inline VOID
SetLineNo (IN UINT32 LineNo
) {
203 inline CHAR8
* GetObjBinAddr (VOID
) {
207 inline UINT8
GetObjBinLen (VOID
) {
211 inline bool ExpendObjBin (IN UINT8 Size
) {
212 if ((mDelayEmit
== TRUE
) && ((mObjBinLen
+ Size
) > mObjBinLen
)) {
222 * The definition of CIfrOpHeader
226 EFI_IFR_OP_HEADER
*mHeader
;
229 CIfrOpHeader (IN UINT8 OpCode
, IN VOID
*StartAddr
, IN UINT8 Length
= 0);
230 CIfrOpHeader (IN CIfrOpHeader
&);
232 VOID
IncLength (UINT8 Size
) {
233 if ((mHeader
->Length
+ Size
) > mHeader
->Length
) {
234 mHeader
->Length
+= Size
;
238 VOID
DecLength (UINT8 Size
) {
239 if (mHeader
->Length
>= Size
) {
245 return mHeader
->Length
;
249 return mHeader
->Scope
;
252 VOID
SetScope (IN UINT8 Scope
) {
253 mHeader
->Scope
= Scope
;
257 extern UINT8 gScopeCount
;
260 * The definition of CIfrStatementHeader
262 class CIfrStatementHeader
{
264 EFI_IFR_STATEMENT_HEADER
*mHeader
;
267 CIfrStatementHeader (
268 IN EFI_IFR_STATEMENT_HEADER
*StartAddr
269 ) : mHeader ((EFI_IFR_STATEMENT_HEADER
*)StartAddr
) {
271 mHeader
->Help
= EFI_STRING_ID_INVALID
;
272 mHeader
->Prompt
= EFI_STRING_ID_INVALID
;
275 EFI_IFR_STATEMENT_HEADER
*GetStatementHeader () {
279 VOID
SetPrompt (IN EFI_STRING_ID Prompt
) {
280 mHeader
->Prompt
= Prompt
;
283 VOID
SetHelp (IN EFI_STRING_ID Help
) {
284 mHeader
->Help
= Help
;
289 * The definition of CIfrQuestionHeader
291 #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
293 class CIfrQuestionHeader
: public CIfrStatementHeader
{
295 EFI_IFR_QUESTION_HEADER
*mHeader
;
297 EFI_IFR_STATEMENT_HEADER
* QH2SH (EFI_IFR_QUESTION_HEADER
*Qheader
) {
298 return &(Qheader
)->Header
;
302 EFI_QUESTION_ID
QUESTION_ID (VOID
) {
303 return mHeader
->QuestionId
;
306 EFI_VARSTORE_ID
VARSTORE_ID (VOID
) {
307 return mHeader
->VarStoreId
;
310 VOID
VARSTORE_INFO (OUT EFI_VARSTORE_INFO
*Info
) {
312 Info
->mVarStoreId
= mHeader
->VarStoreId
;
313 memcpy (&Info
->mVarStoreId
, &mHeader
->VarStoreInfo
, sizeof (Info
->mVarStoreId
));
318 return mHeader
->Flags
;
323 IN EFI_IFR_QUESTION_HEADER
*StartAddr
,
324 IN UINT8 Flags
= EFI_IFR_QUESTION_FLAG_DEFAULT
325 ) : CIfrStatementHeader (QH2SH(StartAddr
)) {
327 mHeader
->QuestionId
= EFI_QUESTION_ID_INVALID
;
328 mHeader
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
329 mHeader
->VarStoreInfo
.VarName
= EFI_STRING_ID_INVALID
;
330 mHeader
->VarStoreInfo
.VarOffset
= EFI_VAROFFSET_INVALID
;
331 mHeader
->Flags
= Flags
;
334 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
335 mHeader
->QuestionId
= QuestionId
;
338 VOID
SetVarStoreInfo (IN EFI_VARSTORE_INFO
*Info
) {
339 mHeader
->VarStoreId
= Info
->mVarStoreId
;
340 mHeader
->VarStoreInfo
.VarName
= Info
->mInfo
.mVarName
;
341 mHeader
->VarStoreInfo
.VarOffset
= Info
->mInfo
.mVarOffset
;
344 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 Flags
) {
345 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_READ_ONLY
)) {
346 mHeader
->Flags
|= EFI_IFR_FLAG_READ_ONLY
;
349 _FLAG_CLEAR (Flags
, 0x02);
351 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_CALLBACK
)) {
352 mHeader
->Flags
|= EFI_IFR_FLAG_CALLBACK
;
355 _FLAG_CLEAR (Flags
, 0x08);
357 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_RESET_REQUIRED
)) {
358 mHeader
->Flags
|= EFI_IFR_FLAG_RESET_REQUIRED
;
361 _FLAG_CLEAR (Flags
, 0x20);
363 if (_FLAG_TEST_AND_CLEAR (Flags
, EFI_IFR_FLAG_OPTIONS_ONLY
)) {
364 mHeader
->Flags
|= EFI_IFR_FLAG_OPTIONS_ONLY
;
367 return _FLAGS_ZERO (Flags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
371 static CIfrQuestionHeader
*gCurrentQuestion
= NULL
;
374 * The definition of CIfrMinMaxStepData
376 class CIfrMinMaxStepData
{
378 MINMAXSTEP_DATA
*mMinMaxStepData
;
381 CIfrMinMaxStepData (MINMAXSTEP_DATA
*DataAddr
) : mMinMaxStepData (DataAddr
) {
382 mMinMaxStepData
->u64
.MinValue
= 0;
383 mMinMaxStepData
->u64
.MaxValue
= 0;
384 mMinMaxStepData
->u64
.Step
= 0;
387 VOID
SetMinMaxStepData (IN UINT64 MinValue
, IN UINT64 MaxValue
, IN UINT64 Step
) {
388 mMinMaxStepData
->u64
.MinValue
= MinValue
;
389 mMinMaxStepData
->u64
.MaxValue
= MaxValue
;
390 mMinMaxStepData
->u64
.Step
= Step
;
393 VOID
SetMinMaxStepData (IN UINT32 MinValue
, IN UINT32 MaxValue
, IN UINT32 Step
) {
394 mMinMaxStepData
->u32
.MinValue
= MinValue
;
395 mMinMaxStepData
->u32
.MaxValue
= MaxValue
;
396 mMinMaxStepData
->u32
.Step
= Step
;
399 VOID
SetMinMaxStepData (IN UINT16 MinValue
, IN UINT16 MaxValue
, IN UINT16 Step
) {
400 mMinMaxStepData
->u16
.MinValue
= MinValue
;
401 mMinMaxStepData
->u16
.MaxValue
= MaxValue
;
402 mMinMaxStepData
->u16
.Step
= Step
;
405 VOID
SetMinMaxStepData (IN UINT8 MinValue
, IN UINT8 MaxValue
, IN UINT8 Step
) {
406 mMinMaxStepData
->u8
.MinValue
= MinValue
;
407 mMinMaxStepData
->u8
.MaxValue
= MaxValue
;
408 mMinMaxStepData
->u8
.Step
= Step
;
414 * The definition of all of the UEFI IFR Objects
416 class CIfrFormSet
: public CIfrObj
, public CIfrOpHeader
{
418 EFI_IFR_FORM_SET
*mFormSet
;
421 CIfrFormSet () : CIfrObj (EFI_IFR_FORM_SET_OP
, (CHAR8
**)&mFormSet
),
422 CIfrOpHeader (EFI_IFR_FORM_SET_OP
, &mFormSet
->Header
) {
423 mFormSet
->Help
= EFI_STRING_ID_INVALID
;
424 mFormSet
->FormSetTitle
= EFI_STRING_ID_INVALID
;
425 memset (&mFormSet
->Guid
, 0, sizeof (EFI_GUID
));
428 VOID
SetGuid (IN EFI_GUID
*Guid
) {
429 memcpy (&mFormSet
->Guid
, Guid
, sizeof (EFI_GUID
));
432 VOID
SetFormSetTitle (IN EFI_STRING_ID FormSetTitle
) {
433 mFormSet
->FormSetTitle
= FormSetTitle
;
436 VOID
SetHelp (IN EFI_STRING_ID Help
) {
437 mFormSet
->Help
= Help
;
441 class CIfrEnd
: public CIfrObj
, public CIfrOpHeader
{
446 CIfrEnd () : CIfrObj (EFI_IFR_END_OP
, (CHAR8
**)&mEnd
),
447 CIfrOpHeader (EFI_IFR_END_OP
, &mEnd
->Header
) {}
450 class CIfrDefaultStore
: public CIfrObj
, public CIfrOpHeader
{
452 EFI_IFR_DEFAULTSTORE
*mDefaultStore
;
455 CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP
, (CHAR8
**)&mDefaultStore
),
456 CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP
, &mDefaultStore
->Header
) {
457 mDefaultStore
->DefaultId
= EFI_VARSTORE_ID_INVALID
;
458 mDefaultStore
->DefaultName
= EFI_STRING_ID_INVALID
;
461 VOID
SetDefaultName (IN EFI_STRING_ID DefaultName
) {
462 mDefaultStore
->DefaultName
= DefaultName
;
465 VOID
SetDefaultId (IN UINT16 DefaultId
) {
466 mDefaultStore
->DefaultId
= DefaultId
;
470 #define EFI_FORM_ID_MAX 0xFFFF
471 #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
473 class CIfrForm
: public CIfrObj
, public CIfrOpHeader
{
477 STATIC UINT32 FormIdBitMap
[EFI_FREE_FORM_ID_BITMAP_SIZE
];
479 STATIC BOOLEAN
ChekFormIdFree (IN EFI_FORM_ID FormId
) {
480 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
481 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
483 return (FormIdBitMap
[Index
] & (0x80000000 >> Offset
)) == 0;
486 STATIC VOID
MarkFormIdUsed (IN EFI_FORM_ID FormId
) {
487 UINT32 Index
= (FormId
/ EFI_BITS_PER_UINT32
);
488 UINT32 Offset
= (FormId
% EFI_BITS_PER_UINT32
);
490 FormIdBitMap
[Index
] |= (0x80000000 >> Offset
);
494 CIfrForm () : CIfrObj (EFI_IFR_FORM_OP
, (CHAR8
**)&mForm
),
495 CIfrOpHeader (EFI_IFR_FORM_OP
, &mForm
->Header
) {
497 mForm
->FormTitle
= EFI_STRING_ID_INVALID
;
500 EFI_VFR_RETURN_CODE
SetFormId (IN EFI_FORM_ID FormId
) {
501 if (CIfrForm::ChekFormIdFree (FormId
) == FALSE
) {
502 return VFR_RETURN_FORMID_REDEFINED
;
504 mForm
->FormId
= FormId
;
505 CIfrForm::MarkFormIdUsed (FormId
);
506 return VFR_RETURN_SUCCESS
;
509 VOID
SetFormTitle (IN EFI_STRING_ID FormTitle
) {
510 mForm
->FormTitle
= FormTitle
;
514 class CIfrVarStore
: public CIfrObj
, public CIfrOpHeader
{
516 EFI_IFR_VARSTORE
*mVarStore
;
519 CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP
, (CHAR8
**)&mVarStore
, sizeof (EFI_IFR_VARSTORE
), TRUE
),
520 CIfrOpHeader (EFI_IFR_VARSTORE_OP
, &mVarStore
->Header
) {
521 mVarStore
->VarStoreId
= EFI_VARSTORE_ID_INVALID
;
523 memset (&mVarStore
->Guid
, 0, sizeof (EFI_GUID
));
524 mVarStore
->Name
[0] = '\0';
527 VOID
SetGuid (IN EFI_GUID
*Guid
) {
528 memcpy (&mVarStore
->Guid
, Guid
, sizeof (EFI_GUID
));
531 VOID
SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId
) {
532 mVarStore
->VarStoreId
= VarStoreId
;
535 VOID
SetSize (IN UINT16 Size
) {
536 mVarStore
->Size
= Size
;
539 VOID
SetName (IN INT8
*Name
) {
545 if (ExpendObjBin (Len
) == TRUE
) {
547 strcpy ((INT8
*)(mVarStore
->Name
), Name
);
554 class CIfrVarStoreEfi
: public CIfrObj
, public CIfrOpHeader
{
556 EFI_IFR_VARSTORE_EFI
*mVarStoreEfi
;
559 CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP
, (CHAR8
**)&mVarStoreEfi
),
560 CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP
, &mVarStoreEfi
->Header
) {
561 mVarStoreEfi
->VarStoreId
= EFI_VAROFFSET_INVALID
;
562 memset (&mVarStoreEfi
->Guid
, 0, sizeof (EFI_GUID
));
565 VOID
SetGuid (IN EFI_GUID
*Guid
) {
566 memcpy (&mVarStoreEfi
->Guid
, Guid
, sizeof (EFI_GUID
));
569 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
570 mVarStoreEfi
->VarStoreId
= VarStoreId
;
573 VOID
SetAttributes (IN UINT32 Attributes
) {
574 mVarStoreEfi
->Attributes
= Attributes
;
578 class CIfrVarStoreNameValue
: public CIfrObj
, public CIfrOpHeader
{
580 EFI_IFR_VARSTORE_NAME_VALUE
*mVarStoreNameValue
;
583 CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP
, (CHAR8
**)&mVarStoreNameValue
),
584 CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP
, &mVarStoreNameValue
->Header
) {
585 mVarStoreNameValue
->VarStoreId
= EFI_VAROFFSET_INVALID
;
586 memset (&mVarStoreNameValue
->Guid
, 0, sizeof (EFI_GUID
));
589 VOID
SetGuid (IN EFI_GUID
*Guid
) {
590 memcpy (&mVarStoreNameValue
->Guid
, Guid
, sizeof (EFI_GUID
));
593 VOID
SetVarStoreId (IN UINT16 VarStoreId
) {
594 mVarStoreNameValue
->VarStoreId
= VarStoreId
;
598 class CIfrImage
: public CIfrObj
, public CIfrOpHeader
{
600 EFI_IFR_IMAGE
*mImage
;
603 CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP
, (CHAR8
**)&mImage
),
604 CIfrOpHeader (EFI_IFR_FORM_OP
, &mImage
->Header
) {
605 mImage
->Id
= EFI_IMAGE_ID_INVALID
;
608 VOID
SetImageId (IN EFI_IMAGE_ID ImageId
) {
609 mImage
->Id
= ImageId
;
613 class CIfrLocked
: public CIfrObj
, public CIfrOpHeader
{
615 EFI_IFR_LOCKED
*mLocked
;
618 CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP
, (CHAR8
**)&mLocked
),
619 CIfrOpHeader (EFI_IFR_LOCKED_OP
, &mLocked
->Header
) {}
622 class CIfrRule
: public CIfrObj
, public CIfrOpHeader
{
627 CIfrRule () : CIfrObj (EFI_IFR_RULE_OP
, (CHAR8
**)&mRule
),
628 mRule ((EFI_IFR_RULE
*)GetObjBinAddr()),
629 CIfrOpHeader (EFI_IFR_RULE_OP
, &mRule
->Header
) {
630 mRule
->RuleId
= EFI_RULE_ID_INVALID
;
633 VOID
SetRuleId (IN UINT8 RuleId
) {
634 mRule
->RuleId
= RuleId
;
638 static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue
= {0, };
640 class CIfrDefault
: public CIfrObj
, public CIfrOpHeader
{
642 EFI_IFR_DEFAULT
*mDefault
;
646 IN UINT16 DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
,
647 IN UINT8 Type
= EFI_IFR_TYPE_OTHER
,
648 IN EFI_IFR_TYPE_VALUE Value
= gZeroEfiIfrTypeValue
649 ) : CIfrObj (EFI_IFR_DEFAULT_OP
, (CHAR8
**)&mDefault
),
650 CIfrOpHeader (EFI_IFR_DEFAULT_OP
, &mDefault
->Header
) {
651 mDefault
->Type
= Type
;
652 mDefault
->Value
= Value
;
653 mDefault
->DefaultId
= DefaultId
;
656 VOID
SetDefaultId (IN UINT16 DefaultId
) {
657 mDefault
->DefaultId
= DefaultId
;
660 VOID
SetType (IN UINT8 Type
) {
661 mDefault
->Type
= Type
;
664 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
665 mDefault
->Value
= Value
;
669 class CIfrValue
: public CIfrObj
, public CIfrOpHeader
{
671 EFI_IFR_VALUE
*mValue
;
674 CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP
, (CHAR8
**)&mValue
),
675 CIfrOpHeader (EFI_IFR_VALUE_OP
, &mValue
->Header
) {}
679 class CIfrSubtitle
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
681 EFI_IFR_SUBTITLE
*mSubtitle
;
684 CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP
, (CHAR8
**)&mSubtitle
),
685 CIfrOpHeader (EFI_IFR_SUBTITLE_OP
, &mSubtitle
->Header
),
686 CIfrStatementHeader (&mSubtitle
->Statement
) {
687 mSubtitle
->Flags
= 0;
690 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
691 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_HORIZONTAL
)) {
692 mSubtitle
->Flags
|= EFI_IFR_FLAGS_HORIZONTAL
;
695 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
699 class CIfrText
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
704 CIfrText () : CIfrObj (EFI_IFR_TEXT_OP
, (CHAR8
**)&mText
),
705 CIfrOpHeader (EFI_IFR_TEXT_OP
, &mText
->Header
),
706 CIfrStatementHeader (&mText
->Statement
) {
707 mText
->TextTwo
= EFI_STRING_ID_INVALID
;
710 VOID
SetTextTwo (IN EFI_STRING_ID StringId
) {
711 mText
->TextTwo
= StringId
;
715 class CIfrRef
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
720 CIfrRef () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef
),
721 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef
->Header
),
722 CIfrQuestionHeader (&mRef
->Question
) {
726 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
727 mRef
->FormId
= FormId
;
731 class CIfrRef2
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
736 CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef2
, sizeof (EFI_IFR_REF2
)),
737 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef2
->Header
, sizeof (EFI_IFR_REF2
)),
738 CIfrQuestionHeader (&mRef2
->Question
) {
740 mRef2
->QuestionId
= EFI_QUESTION_ID_INVALID
;
743 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
744 mRef2
->FormId
= FormId
;
747 EFI_VFR_RETURN_CODE
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
748 if (QuestionId
== EFI_QUESTION_ID_INVALID
) {
749 return VFR_RETURN_UNDEFINED
;
751 mRef2
->QuestionId
= QuestionId
;
752 return VFR_RETURN_SUCCESS
;
756 class CIfrRef3
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
761 CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef3
, sizeof(EFI_IFR_REF3
)),
762 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef3
->Header
, sizeof (EFI_IFR_REF3
)),
763 CIfrQuestionHeader (&mRef3
->Question
) {
765 mRef3
->QuestionId
= EFI_QUESTION_ID_INVALID
;
766 memset (&mRef3
->FormSetId
, 0, sizeof (EFI_GUID
));
769 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
770 mRef3
->FormId
= FormId
;
773 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
774 mRef3
->QuestionId
= QuestionId
;
777 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
778 mRef3
->FormSetId
= FormSetId
;
782 class CIfrRef4
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
787 CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP
, (CHAR8
**)&mRef4
, sizeof(EFI_IFR_REF3
)),
788 CIfrOpHeader (EFI_IFR_REF_OP
, &mRef4
->Header
, sizeof (EFI_IFR_REF3
)),
789 CIfrQuestionHeader (&mRef4
->Question
) {
791 mRef4
->QuestionId
= EFI_QUESTION_ID_INVALID
;
792 memset (&mRef4
->FormSetId
, 0, sizeof (EFI_GUID
));
793 mRef4
->DevicePath
= EFI_STRING_ID_INVALID
;
796 VOID
SetFormId (IN EFI_FORM_ID FormId
) {
797 mRef4
->FormId
= FormId
;
800 VOID
SetQuestionId (IN EFI_QUESTION_ID QuestionId
) {
801 mRef4
->QuestionId
= QuestionId
;
804 VOID
SetFormSetId (IN EFI_GUID FormSetId
) {
805 mRef4
->FormSetId
= FormSetId
;
808 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
809 mRef4
->DevicePath
= DevicePath
;
813 class CIfrResetButton
: public CIfrObj
, public CIfrOpHeader
, public CIfrStatementHeader
{
815 EFI_IFR_RESET_BUTTON
*mResetButton
;
818 CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP
, (CHAR8
**)&mResetButton
),
819 CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP
, &mResetButton
->Header
),
820 CIfrStatementHeader (&mResetButton
->Question
.Header
) {
821 mResetButton
->DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
824 VOID
SetDefaultId (IN UINT16 DefaultId
) {
825 mResetButton
->DefaultId
= DefaultId
;
829 class CIfrCheckBox
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
831 EFI_IFR_CHECKBOX
*mCheckBox
;
834 CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP
, (CHAR8
**)&mCheckBox
),
835 CIfrOpHeader (EFI_IFR_CHECKBOX_OP
, &mCheckBox
->Header
),
836 CIfrQuestionHeader (&mCheckBox
->Question
) {
837 mCheckBox
->Flags
= EFI_IFR_CHECKBOX_DEFAULT
;
838 gCurrentQuestion
= this;
842 gCurrentQuestion
= NULL
;
845 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, UINT8 LFlags
) {
846 EFI_VFR_RETURN_CODE Ret
;
848 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
849 if (Ret
!= VFR_RETURN_SUCCESS
) {
853 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT
)) {
854 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT
;
857 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_CHECKBOX_DEFAULT_MFG
)) {
858 mCheckBox
->Flags
|= EFI_IFR_CHECKBOX_DEFAULT_MFG
;
861 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
865 class CIfrAction
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
867 EFI_IFR_ACTION
*mAction
;
870 CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP
, (CHAR8
**)&mAction
),
871 CIfrOpHeader (EFI_IFR_ACTION_OP
, &mAction
->Header
),
872 CIfrQuestionHeader (&mAction
->Question
) {
873 mAction
->QuestionConfig
= EFI_STRING_ID_INVALID
;
876 VOID
SetQuestionConfig (IN EFI_STRING_ID QuestionConfig
) {
877 mAction
->QuestionConfig
= QuestionConfig
;
881 class CIfrDate
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
886 CIfrDate () : CIfrObj (EFI_IFR_DATE_OP
, (CHAR8
**)&mDate
),
887 CIfrOpHeader (EFI_IFR_DATE_OP
, &mDate
->Header
),
888 CIfrQuestionHeader (&mDate
->Question
) {
892 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
893 EFI_VFR_RETURN_CODE Ret
;
895 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
896 if (Ret
!= VFR_RETURN_SUCCESS
) {
900 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_YEAR_SUPPRESS
)) {
901 mDate
->Flags
|= EFI_QF_DATE_YEAR_SUPPRESS
;
904 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_MONTH_SUPPRESS
)) {
905 mDate
->Flags
|= EFI_QF_DATE_MONTH_SUPPRESS
;
908 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_QF_DATE_DAY_SUPPRESS
)) {
909 mDate
->Flags
|= EFI_QF_DATE_DAY_SUPPRESS
;
912 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_NORMAL
)) {
913 mDate
->Flags
|= QF_DATE_STORAGE_NORMAL
;
914 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_TIME
)) {
915 mDate
->Flags
|= QF_DATE_STORAGE_TIME
;
916 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_DATE_STORAGE_WAKEUP
)) {
917 mDate
->Flags
|= QF_DATE_STORAGE_WAKEUP
;
920 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
924 class CIfrNumeric
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
926 EFI_IFR_NUMERIC
*mNumeric
;
929 CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP
, (CHAR8
**)&mNumeric
),
930 CIfrOpHeader (EFI_IFR_NUMERIC_OP
, &mNumeric
->Header
),
931 CIfrQuestionHeader (&mNumeric
->Question
),
932 CIfrMinMaxStepData (&mNumeric
->data
) {
933 mNumeric
->Flags
= EFI_IFR_NUMERIC_SIZE_1
| EFI_IFR_DISPLAY_UINT_DEC
;
934 gCurrentQuestion
= this;
938 gCurrentQuestion
= NULL
;
941 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
942 EFI_VFR_RETURN_CODE Ret
;
944 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
945 if (Ret
!= VFR_RETURN_SUCCESS
) {
949 if (LFlags
& EFI_IFR_DISPLAY
) {
950 mNumeric
->Flags
= LFlags
;
952 mNumeric
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
954 return VFR_RETURN_SUCCESS
;
958 class CIfrOneOf
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
, public CIfrMinMaxStepData
{
960 EFI_IFR_ONE_OF
*mOneOf
;
963 CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP
, (CHAR8
**)&mOneOf
),
964 CIfrOpHeader (EFI_IFR_ONE_OF_OP
, &mOneOf
->Header
),
965 CIfrQuestionHeader (&mOneOf
->Question
),
966 CIfrMinMaxStepData (&mOneOf
->data
) {
968 gCurrentQuestion
= this;
972 gCurrentQuestion
= NULL
;
975 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
976 EFI_VFR_RETURN_CODE Ret
;
978 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
979 if (Ret
!= VFR_RETURN_SUCCESS
) {
983 if (LFlags
& EFI_IFR_DISPLAY
) {
984 mOneOf
->Flags
= LFlags
;
986 mOneOf
->Flags
= LFlags
| EFI_IFR_DISPLAY_UINT_DEC
;
988 return VFR_RETURN_SUCCESS
;
992 class CIfrString
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
994 EFI_IFR_STRING
*mString
;
997 CIfrString () : CIfrObj (EFI_IFR_STRING_OP
, (CHAR8
**)&mString
),
998 CIfrOpHeader (EFI_IFR_STRING_OP
, &mString
->Header
),
999 CIfrQuestionHeader (&mString
->Question
) {
1001 mString
->MinSize
= 0;
1002 mString
->MaxSize
= 0;
1003 gCurrentQuestion
= this;
1007 gCurrentQuestion
= NULL
;
1010 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1011 EFI_VFR_RETURN_CODE Ret
;
1013 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1014 if (Ret
!= VFR_RETURN_SUCCESS
) {
1018 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_STRING_MULTI_LINE
)) {
1019 mString
->Flags
|= EFI_IFR_STRING_MULTI_LINE
;
1022 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1025 VOID
SetMinSize (IN UINT8 Flags
) {
1026 mString
->MinSize
= Flags
;
1029 VOID
SetMaxSize (IN UINT8 MaxSize
) {
1030 mString
->MaxSize
= MaxSize
;
1034 class CIfrPassword
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1036 EFI_IFR_PASSWORD
*mPassword
;
1039 CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP
, (CHAR8
**)&mPassword
),
1040 CIfrOpHeader (EFI_IFR_PASSWORD_OP
, &mPassword
->Header
),
1041 CIfrQuestionHeader (&mPassword
->Question
) {
1042 mPassword
->MinSize
= 0;
1043 mPassword
->MaxSize
= 0;
1044 gCurrentQuestion
= this;
1048 gCurrentQuestion
= NULL
;
1051 VOID
SetMinSize (IN UINT16 MinSize
) {
1052 mPassword
->MinSize
= MinSize
;
1055 VOID
SetMaxSize (IN UINT16 MaxSize
) {
1056 mPassword
->MaxSize
= MaxSize
;
1060 class CIfrOrderedList
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1062 EFI_IFR_ORDERED_LIST
*mOrderedList
;
1065 CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP
, (CHAR8
**)&mOrderedList
),
1066 CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP
, &mOrderedList
->Header
),
1067 CIfrQuestionHeader (&mOrderedList
->Question
) {
1068 mOrderedList
->MaxContainers
= 0;
1069 mOrderedList
->Flags
= 0;
1070 gCurrentQuestion
= this;
1073 ~CIfrOrderedList () {
1074 gCurrentQuestion
= NULL
;
1077 VOID
SetMaxContainers (IN UINT8 MaxContainers
) {
1078 mOrderedList
->MaxContainers
= MaxContainers
;
1081 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1082 EFI_VFR_RETURN_CODE Ret
;
1084 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1085 if (Ret
!= VFR_RETURN_SUCCESS
) {
1089 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_UNIQUE_SET
)) {
1090 mOrderedList
->Flags
|= EFI_IFR_UNIQUE_SET
;
1093 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_NO_EMPTY_SET
)) {
1094 mOrderedList
->Flags
|= EFI_IFR_NO_EMPTY_SET
;
1097 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1101 class CIfrTime
: public CIfrObj
, public CIfrOpHeader
, public CIfrQuestionHeader
{
1103 EFI_IFR_TIME
*mTime
;
1106 CIfrTime () : CIfrObj (EFI_IFR_TIME_OP
, (CHAR8
**)&mTime
),
1107 CIfrOpHeader (EFI_IFR_TIME_OP
, &mTime
->Header
),
1108 CIfrQuestionHeader (&mTime
->Question
) {
1112 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 HFlags
, IN UINT8 LFlags
) {
1113 EFI_VFR_RETURN_CODE Ret
;
1115 Ret
= CIfrQuestionHeader::SetFlags (HFlags
);
1116 if (Ret
!= VFR_RETURN_SUCCESS
) {
1120 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_HOUR_SUPPRESS
)) {
1121 mTime
->Flags
|= QF_TIME_HOUR_SUPPRESS
;
1124 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_MINUTE_SUPPRESS
)) {
1125 mTime
->Flags
|= QF_TIME_MINUTE_SUPPRESS
;
1128 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_SECOND_SUPPRESS
)) {
1129 mTime
->Flags
|= QF_TIME_SECOND_SUPPRESS
;
1132 if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_NORMAL
)) {
1133 mTime
->Flags
|= QF_TIME_STORAGE_NORMAL
;
1134 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_TIME
)) {
1135 mTime
->Flags
|= QF_TIME_STORAGE_TIME
;
1136 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, QF_TIME_STORAGE_WAKEUP
)) {
1137 mTime
->Flags
|= QF_TIME_STORAGE_WAKEUP
;
1140 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1144 class CIfrDisableIf
: public CIfrObj
, public CIfrOpHeader
{
1146 EFI_IFR_DISABLE_IF
*mDisableIf
;
1149 CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP
, (CHAR8
**)&mDisableIf
),
1150 mDisableIf ((EFI_IFR_DISABLE_IF
*) GetObjBinAddr()),
1151 CIfrOpHeader (EFI_IFR_DISABLE_IF_OP
, &mDisableIf
->Header
) {}
1154 class CIfrSuppressIf
: public CIfrObj
, public CIfrOpHeader
{
1156 EFI_IFR_SUPPRESS_IF
*mSuppressIf
;
1159 CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP
, (CHAR8
**)&mSuppressIf
),
1160 CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP
, &mSuppressIf
->Header
) {}
1163 class CIfrGrayOutIf
: public CIfrObj
, public CIfrOpHeader
{
1165 EFI_IFR_GRAY_OUT_IF
*mGrayOutIf
;
1168 CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP
, (CHAR8
**)&mGrayOutIf
),
1169 CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP
, &mGrayOutIf
->Header
) {}
1172 class CIfrInconsistentIf
: public CIfrObj
, public CIfrOpHeader
{
1174 EFI_IFR_INCONSISTENT_IF
*mInconsistentIf
;
1177 CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP
, (CHAR8
**)&mInconsistentIf
),
1178 CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP
, &mInconsistentIf
->Header
) {
1179 mInconsistentIf
->Error
= EFI_STRING_ID_INVALID
;
1182 VOID
SetError (IN EFI_STRING_ID Error
) {
1183 mInconsistentIf
->Error
= Error
;
1187 class CIfrNoSubmitIf
: public CIfrObj
, public CIfrOpHeader
{
1189 EFI_IFR_NO_SUBMIT_IF
*mNoSubmitIf
;
1192 CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP
, (CHAR8
**)&mNoSubmitIf
),
1193 CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP
, &mNoSubmitIf
->Header
) {
1194 mNoSubmitIf
->Error
= EFI_STRING_ID_INVALID
;
1197 VOID
SetError (IN EFI_STRING_ID Error
) {
1198 mNoSubmitIf
->Error
= Error
;
1202 class CIfrRefresh
: public CIfrObj
, public CIfrOpHeader
{
1204 EFI_IFR_REFRESH
*mRefresh
;
1207 CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP
, (CHAR8
**)&mRefresh
),
1208 CIfrOpHeader (EFI_IFR_REFRESH_OP
, &mRefresh
->Header
) {
1209 mRefresh
->RefreshInterval
= 0;
1212 VOID
SetRefreshInterval (IN UINT8 RefreshInterval
) {
1213 mRefresh
->RefreshInterval
= RefreshInterval
;
1217 class CIfrVarStoreDevice
: public CIfrObj
, public CIfrOpHeader
{
1219 EFI_IFR_VARSTORE_DEVICE
*mVarStoreDevice
;
1222 CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP
, (CHAR8
**)&mVarStoreDevice
),
1223 CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP
, &mVarStoreDevice
->Header
) {
1224 mVarStoreDevice
->DevicePath
= EFI_STRING_ID_INVALID
;
1227 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1228 mVarStoreDevice
->DevicePath
= DevicePath
;
1232 class CIfrOneOfOption
: public CIfrObj
, public CIfrOpHeader
{
1234 EFI_IFR_ONE_OF_OPTION
*mOneOfOption
;
1237 CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP
, (CHAR8
**)&mOneOfOption
),
1238 CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP
, &mOneOfOption
->Header
) {
1239 mOneOfOption
->Flags
= 0;
1240 mOneOfOption
->Option
= EFI_STRING_ID_INVALID
;
1241 mOneOfOption
->Type
= EFI_IFR_TYPE_OTHER
;
1242 memset (&mOneOfOption
->Value
, 0, sizeof (mOneOfOption
->Value
));
1245 VOID
SetOption (IN EFI_STRING_ID Option
) {
1246 mOneOfOption
->Option
= Option
;
1249 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
1250 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT
)) {
1251 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT
;
1254 if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_OPTION_DEFAULT_MFG
)) {
1255 mOneOfOption
->Flags
|= EFI_IFR_OPTION_DEFAULT_MFG
;
1258 if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
)) {
1259 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_8
);
1260 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_8
;
1261 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
)) {
1262 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_16
);
1263 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_16
;
1264 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
)) {
1265 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_32
);
1266 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_32
;
1267 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
)) {
1268 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_NUM_SIZE_64
);
1269 mOneOfOption
->Flags
|= EFI_IFR_TYPE_NUM_SIZE_64
;
1270 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_BOOLEAN
)) {
1271 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_BOOLEAN
);
1272 mOneOfOption
->Flags
|= EFI_IFR_TYPE_BOOLEAN
;
1273 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_TIME
)) {
1274 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_TIME
);
1275 mOneOfOption
->Flags
|= EFI_IFR_TYPE_TIME
;
1276 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_DATE
)) {
1277 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_DATE
);
1278 mOneOfOption
->Flags
|= EFI_IFR_TYPE_DATE
;
1279 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_STRING
)) {
1280 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_STRING
);
1281 mOneOfOption
->Flags
|= EFI_IFR_TYPE_STRING
;
1282 } else if (_IS_EQUAL (LFlags
, EFI_IFR_TYPE_OTHER
)) {
1283 _FLAG_CLEAR (LFlags
, EFI_IFR_TYPE_OTHER
);
1284 mOneOfOption
->Flags
|= EFI_IFR_TYPE_OTHER
;
1287 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;
1290 VOID
SetType (IN UINT8 Type
) {
1291 mOneOfOption
->Type
= Type
;
1294 VOID
SetValue (IN EFI_IFR_TYPE_VALUE Value
) {
1295 mOneOfOption
->Value
= Value
;
1298 UINT8
GetFlags (VOID
) {
1299 return mOneOfOption
->Flags
;
1303 static EFI_GUID IfrTianoGuid
= EFI_IFR_TIANO_GUID
;
1305 class CIfrClass
: public CIfrObj
, public CIfrOpHeader
{
1307 EFI_IFR_GUID_CLASS
*mClass
;
1310 CIfrClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mClass
, sizeof (EFI_IFR_GUID_CLASS
)),
1311 CIfrOpHeader (EFI_IFR_GUID_OP
, &mClass
->Header
, sizeof (EFI_IFR_GUID_CLASS
)) {
1312 mClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_CLASS
;
1313 mClass
->Guid
= IfrTianoGuid
;
1314 mClass
->Class
= EFI_NON_DEVICE_CLASS
;
1317 VOID
SetClass (IN UINT16 Class
) {
1318 mClass
->Class
= Class
;
1322 class CIfrSubClass
: public CIfrObj
, public CIfrOpHeader
{
1324 EFI_IFR_GUID_SUBCLASS
*mSubClass
;
1327 CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mSubClass
, sizeof (EFI_IFR_GUID_SUBCLASS
)),
1328 CIfrOpHeader (EFI_IFR_GUID_OP
, &mSubClass
->Header
, sizeof (EFI_IFR_GUID_SUBCLASS
)) {
1329 mSubClass
->ExtendOpCode
= EFI_IFR_EXTEND_OP_SUBCLASS
;
1330 mSubClass
->Guid
= IfrTianoGuid
;
1331 mSubClass
->SubClass
= EFI_SETUP_APPLICATION_SUBCLASS
;
1334 VOID
SetSubClass (IN UINT16 SubClass
) {
1335 mSubClass
->SubClass
= SubClass
;
1339 class CIfrLabel
: public CIfrObj
, public CIfrOpHeader
{
1341 EFI_IFR_GUID_LABEL
*mLabel
;
1344 CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mLabel
, sizeof (EFI_IFR_GUID_LABEL
)),
1345 CIfrOpHeader (EFI_IFR_GUID_OP
, &mLabel
->Header
, sizeof (EFI_IFR_GUID_LABEL
)) {
1346 mLabel
->ExtendOpCode
= EFI_IFR_EXTEND_OP_LABEL
;
1347 mLabel
->Guid
= IfrTianoGuid
;
1350 VOID
SetNumber (IN UINT16 Number
) {
1351 mLabel
->Number
= Number
;
1355 class CIfrBanner
: public CIfrObj
, public CIfrOpHeader
{
1357 EFI_IFR_GUID_BANNER
*mBanner
;
1360 CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mBanner
, sizeof (EFI_IFR_GUID_BANNER
)),
1361 CIfrOpHeader (EFI_IFR_GUID_OP
, &mBanner
->Header
, sizeof (EFI_IFR_GUID_BANNER
)) {
1362 mBanner
->ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
1363 mBanner
->Guid
= IfrTianoGuid
;
1366 VOID
SetTitle (IN EFI_STRING_ID StringId
) {
1367 mBanner
->Title
= StringId
;
1370 VOID
SetLine (IN UINT16 Line
) {
1371 mBanner
->LineNumber
= Line
;
1374 VOID
SetAlign (IN UINT8 Align
) {
1375 mBanner
->Alignment
= Align
;
1379 class CIfrTimeout
: public CIfrObj
, public CIfrOpHeader
{
1381 EFI_IFR_GUID_TIMEOUT
*mTimeout
;
1384 CIfrTimeout (IN UINT16 Timeout
= 0) : CIfrObj (EFI_IFR_GUID_OP
, (CHAR8
**)&mTimeout
, sizeof (EFI_IFR_GUID_TIMEOUT
)),
1385 CIfrOpHeader (EFI_IFR_GUID_OP
, &mTimeout
->Header
, sizeof (EFI_IFR_GUID_TIMEOUT
)) {
1386 mTimeout
->ExtendOpCode
= EFI_IFR_EXTEND_OP_TIMEOUT
;
1387 mTimeout
->Guid
= IfrTianoGuid
;
1388 mTimeout
->TimeOut
= Timeout
;
1391 VOID
SetTimeout (IN UINT16 Timeout
) {
1392 mTimeout
->TimeOut
= Timeout
;
1396 class CIfrDup
: public CIfrObj
, public CIfrOpHeader
{
1403 ) : CIfrObj (EFI_IFR_DUP_OP
, (CHAR8
**)&mDup
),
1404 CIfrOpHeader (EFI_IFR_DUP_OP
, &mDup
->Header
) {
1409 class CIfrEqIdId
: public CIfrObj
, public CIfrOpHeader
{
1411 EFI_IFR_EQ_ID_ID
*mEqIdId
;
1416 ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP
, (CHAR8
**)&mEqIdId
),
1417 CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP
, &mEqIdId
->Header
) {
1419 mEqIdId
->QuestionId1
= EFI_QUESTION_ID_INVALID
;
1420 mEqIdId
->QuestionId2
= EFI_QUESTION_ID_INVALID
;
1423 VOID
SetQuestionId1 (
1424 IN EFI_QUESTION_ID QuestionId
,
1428 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1429 mEqIdId
->QuestionId1
= QuestionId
;
1431 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId1
), sizeof (EFI_QUESTION_ID
), LineNo
);
1435 VOID
SetQuestionId2 (
1436 IN EFI_QUESTION_ID QuestionId
,
1440 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1441 mEqIdId
->QuestionId2
= QuestionId
;
1443 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdId
->QuestionId2
), sizeof (EFI_QUESTION_ID
), LineNo
);
1448 class CIfrEqIdVal
: public CIfrObj
, public CIfrOpHeader
{
1450 EFI_IFR_EQ_ID_VAL
*mEqIdVal
;
1455 ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP
, (CHAR8
**)&mEqIdVal
),
1456 CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP
, &mEqIdVal
->Header
) {
1458 mEqIdVal
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1461 VOID
SetQuestionId (
1462 IN EFI_QUESTION_ID QuestionId
,
1466 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1467 mEqIdVal
->QuestionId
= QuestionId
;
1469 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVal
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1473 VOID
SetValue (IN UINT16 Value
) {
1474 mEqIdVal
->Value
= Value
;
1478 class CIfrEqIdList
: public CIfrObj
, public CIfrOpHeader
{
1480 EFI_IFR_EQ_ID_LIST
*mEqIdVList
;
1485 ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP
, (CHAR8
**)&mEqIdVList
, sizeof (EFI_IFR_EQ_ID_LIST
), TRUE
),
1486 CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP
, &mEqIdVList
->Header
) {
1488 mEqIdVList
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1489 mEqIdVList
->ListLength
= 0;
1490 mEqIdVList
->ValueList
[0] = 0;
1493 VOID
SetQuestionId (
1494 IN EFI_QUESTION_ID QuestionId
,
1498 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1499 mEqIdVList
->QuestionId
= QuestionId
;
1501 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mEqIdVList
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1505 VOID
SetListLength (IN UINT16 ListLength
) {
1506 mEqIdVList
->ListLength
= ListLength
;
1509 VOID
SetValueList (IN UINT16 Index
, IN UINT16 Value
) {
1511 mEqIdVList
->ValueList
[0] = Value
;
1515 if (ExpendObjBin (sizeof (UINT16
)) ==TRUE
) {
1516 IncLength (sizeof (UINT16
));
1517 mEqIdVList
->ValueList
[Index
] = Value
;
1522 class CIfrQuestionRef1
: public CIfrObj
, public CIfrOpHeader
{
1524 EFI_IFR_QUESTION_REF1
*mQuestionRef1
;
1529 ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP
, (CHAR8
**)&mQuestionRef1
),
1530 CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP
, &mQuestionRef1
->Header
) {
1532 mQuestionRef1
->QuestionId
= EFI_QUESTION_ID_INVALID
;
1535 VOID
SetQuestionId (
1536 IN EFI_QUESTION_ID QuestionId
,
1540 if (QuestionId
!= EFI_QUESTION_ID_INVALID
) {
1541 mQuestionRef1
->QuestionId
= QuestionId
;
1543 gCFormPkg
.AssignPending (VarIdStr
, (VOID
*)(&mQuestionRef1
->QuestionId
), sizeof (EFI_QUESTION_ID
), LineNo
);
1548 class CIfrQuestionRef2
: public CIfrObj
, public CIfrOpHeader
{
1550 EFI_IFR_QUESTION_REF2
*mQuestionRef2
;
1555 ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP
, (CHAR8
**)&mQuestionRef2
),
1556 CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP
, &mQuestionRef2
->Header
) {
1561 class CIfrQuestionRef3
: public CIfrObj
, public CIfrOpHeader
{
1563 EFI_IFR_QUESTION_REF3
*mQuestionRef3
;
1568 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3
),
1569 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3
->Header
) {
1574 class CIfrQuestionRef3_2
: public CIfrObj
, public CIfrOpHeader
{
1576 EFI_IFR_QUESTION_REF3_2
*mQuestionRef3_2
;
1579 CIfrQuestionRef3_2 (
1581 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_2
, sizeof (EFI_IFR_QUESTION_REF3_2
)),
1582 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_2
->Header
, sizeof (EFI_IFR_QUESTION_REF3_2
)) {
1584 mQuestionRef3_2
->DevicePath
= EFI_STRING_ID_INVALID
;
1587 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1588 mQuestionRef3_2
->DevicePath
= DevicePath
;
1592 class CIfrQuestionRef3_3
: public CIfrObj
, public CIfrOpHeader
{
1594 EFI_IFR_QUESTION_REF3_3
*mQuestionRef3_3
;
1597 CIfrQuestionRef3_3 (
1599 ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP
, (CHAR8
**)&mQuestionRef3_3
, sizeof (EFI_IFR_QUESTION_REF3_3
)),
1600 CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP
, &mQuestionRef3_3
->Header
, sizeof (EFI_IFR_QUESTION_REF3_3
)) {
1602 mQuestionRef3_3
->DevicePath
= EFI_STRING_ID_INVALID
;
1603 memset (&mQuestionRef3_3
->Guid
, 0, sizeof (EFI_GUID
));
1606 VOID
SetDevicePath (IN EFI_STRING_ID DevicePath
) {
1607 mQuestionRef3_3
->DevicePath
= DevicePath
;
1610 VOID
SetGuid (IN EFI_GUID
*Guid
) {
1611 mQuestionRef3_3
->Guid
= *Guid
;
1615 class CIfrRuleRef
: public CIfrObj
, public CIfrOpHeader
{
1617 EFI_IFR_RULE_REF
*mRuleRef
;
1622 ) : CIfrObj (EFI_IFR_RULE_REF_OP
, (CHAR8
**)&mRuleRef
),
1623 CIfrOpHeader (EFI_IFR_RULE_REF_OP
, &mRuleRef
->Header
) {
1625 mRuleRef
->RuleId
= EFI_RULE_ID_INVALID
;
1628 VOID
SetRuleId (IN UINT8 RuleId
) {
1629 mRuleRef
->RuleId
= RuleId
;
1633 class CIfrStringRef1
: public CIfrObj
, public CIfrOpHeader
{
1635 EFI_IFR_STRING_REF1
*mStringRef1
;
1640 ) : CIfrObj (EFI_IFR_STRING_REF1_OP
, (CHAR8
**)&mStringRef1
),
1641 CIfrOpHeader (EFI_IFR_STRING_REF1_OP
, &mStringRef1
->Header
) {
1643 mStringRef1
->StringId
= EFI_STRING_ID_INVALID
;
1646 VOID
SetStringId (IN EFI_STRING_ID StringId
) {
1647 mStringRef1
->StringId
= StringId
;
1651 class CIfrStringRef2
: public CIfrObj
, public CIfrOpHeader
{
1653 EFI_IFR_STRING_REF2
*mStringRef2
;
1658 ) : CIfrObj (EFI_IFR_STRING_REF2_OP
, (CHAR8
**)&mStringRef2
),
1659 CIfrOpHeader (EFI_IFR_STRING_REF2_OP
, &mStringRef2
->Header
) {
1664 class CIfrThis
: public CIfrObj
, public CIfrOpHeader
{
1666 EFI_IFR_THIS
*mThis
;
1671 ) : CIfrObj (EFI_IFR_THIS_OP
, (CHAR8
**)&mThis
),
1672 CIfrOpHeader (EFI_IFR_THIS_OP
, &mThis
->Header
) {
1677 class CIfrUint8
: public CIfrObj
, public CIfrOpHeader
{
1679 EFI_IFR_UINT8
*mUint8
;
1684 ) : CIfrObj (EFI_IFR_UINT8_OP
, (CHAR8
**)&mUint8
),
1685 CIfrOpHeader (EFI_IFR_UINT8_OP
, &mUint8
->Header
) {
1689 VOID
SetValue (IN UINT8 Value
) {
1690 mUint8
->Value
= Value
;
1694 class CIfrUint16
: public CIfrObj
, public CIfrOpHeader
{
1696 EFI_IFR_UINT16
*mUint16
;
1701 ) : CIfrObj (EFI_IFR_UINT16_OP
, (CHAR8
**)&mUint16
),
1702 CIfrOpHeader (EFI_IFR_UINT16_OP
, &mUint16
->Header
) {
1706 VOID
SetValue (IN UINT16 Value
) {
1707 mUint16
->Value
= Value
;
1711 class CIfrUint32
: public CIfrObj
, public CIfrOpHeader
{
1713 EFI_IFR_UINT32
*mUint32
;
1718 ) : CIfrObj (EFI_IFR_UINT32_OP
, (CHAR8
**)&mUint32
),
1719 CIfrOpHeader (EFI_IFR_UINT32_OP
, &mUint32
->Header
) {
1723 VOID
SetValue (IN UINT32 Value
) {
1724 mUint32
->Value
= Value
;
1728 class CIfrUint64
: public CIfrObj
, public CIfrOpHeader
{
1730 EFI_IFR_UINT64
*mUint64
;
1735 ) : CIfrObj (EFI_IFR_UINT64_OP
, (CHAR8
**)&mUint64
),
1736 CIfrOpHeader (EFI_IFR_UINT64_OP
, &mUint64
->Header
) {
1740 VOID
SetValue (IN UINT64 Value
) {
1741 mUint64
->Value
= Value
;
1745 class CIfrTrue
: public CIfrObj
, public CIfrOpHeader
{
1747 EFI_IFR_TRUE
*mTrue
;
1752 ) : CIfrObj (EFI_IFR_TRUE_OP
, (CHAR8
**)&mTrue
),
1753 CIfrOpHeader (EFI_IFR_TRUE_OP
, &mTrue
->Header
) {
1758 class CIfrFalse
: public CIfrObj
, public CIfrOpHeader
{
1760 EFI_IFR_FALSE
*mFalse
;
1765 ) : CIfrObj (EFI_IFR_FALSE_OP
, (CHAR8
**)&mFalse
),
1766 CIfrOpHeader (EFI_IFR_FALSE_OP
, &mFalse
->Header
) {
1771 class CIfrOne
: public CIfrObj
, public CIfrOpHeader
{
1778 ) : CIfrObj (EFI_IFR_ONE_OP
, (CHAR8
**)&mOne
),
1779 CIfrOpHeader (EFI_IFR_ONE_OP
, &mOne
->Header
) {
1784 class CIfrOnes
: public CIfrObj
, public CIfrOpHeader
{
1786 EFI_IFR_ONES
*mOnes
;
1791 ) : CIfrObj (EFI_IFR_ONES_OP
, (CHAR8
**)&mOnes
),
1792 CIfrOpHeader (EFI_IFR_ONES_OP
, &mOnes
->Header
) {
1797 class CIfrZero
: public CIfrObj
, public CIfrOpHeader
{
1799 EFI_IFR_ZERO
*mZero
;
1804 ) : CIfrObj (EFI_IFR_ZERO_OP
, (CHAR8
**)&mZero
),
1805 CIfrOpHeader (EFI_IFR_ZERO_OP
, &mZero
->Header
) {
1810 class CIfrUndefined
: public CIfrObj
, public CIfrOpHeader
{
1812 EFI_IFR_UNDEFINED
*mUndefined
;
1817 ) : CIfrObj (EFI_IFR_UNDEFINED_OP
, (CHAR8
**)&mUndefined
),
1818 CIfrOpHeader (EFI_IFR_UNDEFINED_OP
, &mUndefined
->Header
) {
1823 class CIfrVersion
: public CIfrObj
, public CIfrOpHeader
{
1825 EFI_IFR_VERSION
*mVersion
;
1830 ) : CIfrObj (EFI_IFR_VERSION_OP
, (CHAR8
**)&mVersion
),
1831 CIfrOpHeader (EFI_IFR_VERSION_OP
, &mVersion
->Header
) {
1836 class CIfrLength
: public CIfrObj
, public CIfrOpHeader
{
1838 EFI_IFR_LENGTH
*mLength
;
1843 ) : CIfrObj (EFI_IFR_LENGTH_OP
, (CHAR8
**)&mLength
),
1844 CIfrOpHeader (EFI_IFR_LENGTH_OP
, &mLength
->Header
) {
1849 class CIfrNot
: public CIfrObj
, public CIfrOpHeader
{
1856 ) : CIfrObj (EFI_IFR_NOT_OP
, (CHAR8
**)&mNot
),
1857 CIfrOpHeader (EFI_IFR_NOT_OP
, &mNot
->Header
) {
1862 class CIfrBitWiseNot
: public CIfrObj
, public CIfrOpHeader
{
1864 EFI_IFR_BITWISE_NOT
*mBitWise
;
1869 ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP
, (CHAR8
**)&mBitWise
),
1870 CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP
, &mBitWise
->Header
) {
1875 class CIfrToBoolean
: public CIfrObj
, public CIfrOpHeader
{
1877 EFI_IFR_TO_BOOLEAN
*mToBoolean
;
1882 ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP
, (CHAR8
**)&mToBoolean
),
1883 CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP
, &mToBoolean
->Header
) {
1888 class CIfrToString
: public CIfrObj
, public CIfrOpHeader
{
1890 EFI_IFR_TO_STRING
*mToString
;
1895 ) : CIfrObj (EFI_IFR_TO_STRING_OP
, (CHAR8
**)&mToString
),
1896 CIfrOpHeader (EFI_IFR_TO_STRING_OP
, &mToString
->Header
) {
1900 VOID
SetFormat (IN UINT8 Format
) {
1901 mToString
->Format
= Format
;
1905 class CIfrToUint
: public CIfrObj
, public CIfrOpHeader
{
1907 EFI_IFR_TO_UINT
*mToUint
;
1912 ) : CIfrObj (EFI_IFR_TO_UINT_OP
, (CHAR8
**)&mToUint
),
1913 CIfrOpHeader (EFI_IFR_TO_UINT_OP
, &mToUint
->Header
) {
1918 class CIfrToUpper
: public CIfrObj
, public CIfrOpHeader
{
1920 EFI_IFR_TO_UPPER
*mToUpper
;
1925 ) : CIfrObj (EFI_IFR_TO_UPPER_OP
, (CHAR8
**)&mToUpper
),
1926 CIfrOpHeader (EFI_IFR_TO_UPPER_OP
, &mToUpper
->Header
) {
1931 class CIfrToLower
: public CIfrObj
, public CIfrOpHeader
{
1933 EFI_IFR_TO_LOWER
*mToLower
;
1938 ) : CIfrObj (EFI_IFR_TO_LOWER_OP
, (CHAR8
**)&mToLower
),
1939 CIfrOpHeader (EFI_IFR_TO_LOWER_OP
, &mToLower
->Header
) {
1944 class CIfrAdd
: public CIfrObj
, public CIfrOpHeader
{
1951 ) : CIfrObj (EFI_IFR_ADD_OP
, (CHAR8
**)&mAdd
),
1952 CIfrOpHeader (EFI_IFR_ADD_OP
, &mAdd
->Header
) {
1957 class CIfrBitWiseAnd
: public CIfrObj
, public CIfrOpHeader
{
1959 EFI_IFR_BITWISE_AND
*mBitWiseAnd
;
1964 ) : CIfrObj (EFI_IFR_BITWISE_AND_OP
, (CHAR8
**)&mBitWiseAnd
),
1965 CIfrOpHeader (EFI_IFR_BITWISE_AND_OP
, &mBitWiseAnd
->Header
) {
1970 class CIfrBitWiseOr
: public CIfrObj
, public CIfrOpHeader
{
1972 EFI_IFR_BITWISE_OR
*mBitWiseOr
;
1977 ) : CIfrObj (EFI_IFR_BITWISE_OR_OP
, (CHAR8
**)&mBitWiseOr
),
1978 CIfrOpHeader (EFI_IFR_BITWISE_OR_OP
, &mBitWiseOr
->Header
) {
1983 class CIfrAnd
: public CIfrObj
, public CIfrOpHeader
{
1990 ) : CIfrObj (EFI_IFR_AND_OP
, (CHAR8
**)&mAnd
),
1991 CIfrOpHeader (EFI_IFR_AND_OP
, &mAnd
->Header
) {
1996 class CIfrCatenate
: public CIfrObj
, public CIfrOpHeader
{
1998 EFI_IFR_CATENATE
*mCatenate
;
2003 ) : CIfrObj (EFI_IFR_CATENATE_OP
, (CHAR8
**)&mCatenate
),
2004 CIfrOpHeader (EFI_IFR_CATENATE_OP
, &mCatenate
->Header
) {
2009 class CIfrDivide
: public CIfrObj
, public CIfrOpHeader
{
2011 EFI_IFR_DIVIDE
*mDivide
;
2016 ) : CIfrObj (EFI_IFR_DIVIDE_OP
, (CHAR8
**)&mDivide
),
2017 CIfrOpHeader (EFI_IFR_DIVIDE_OP
, &mDivide
->Header
) {
2022 class CIfrEqual
: public CIfrObj
, public CIfrOpHeader
{
2024 EFI_IFR_EQUAL
*mEqual
;
2029 ) : CIfrObj (EFI_IFR_EQUAL_OP
, (CHAR8
**)&mEqual
),
2030 CIfrOpHeader (EFI_IFR_EQUAL_OP
, &mEqual
->Header
) {
2035 class CIfrGreaterEqual
: public CIfrObj
, public CIfrOpHeader
{
2037 EFI_IFR_GREATER_EQUAL
*mGreaterEqual
;
2042 ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP
, (CHAR8
**)&mGreaterEqual
),
2043 CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP
, &mGreaterEqual
->Header
) {
2048 class CIfrGreaterThan
: public CIfrObj
, public CIfrOpHeader
{
2050 EFI_IFR_GREATER_THAN
*mGreaterThan
;
2055 ) : CIfrObj (EFI_IFR_GREATER_THAN_OP
, (CHAR8
**)&mGreaterThan
),
2056 CIfrOpHeader (EFI_IFR_GREATER_THAN_OP
, &mGreaterThan
->Header
) {
2061 class CIfrLessEqual
: public CIfrObj
, public CIfrOpHeader
{
2063 EFI_IFR_LESS_EQUAL
*mLessEqual
;
2068 ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP
, (CHAR8
**)&mLessEqual
),
2069 CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP
, &mLessEqual
->Header
) {
2074 class CIfrLessThan
: public CIfrObj
, public CIfrOpHeader
{
2076 EFI_IFR_LESS_THAN
*mLessThan
;
2081 ) : CIfrObj (EFI_IFR_LESS_THAN_OP
, (CHAR8
**)&mLessThan
),
2082 CIfrOpHeader (EFI_IFR_LESS_THAN_OP
, &mLessThan
->Header
) {
2087 class CIfrMatch
: public CIfrObj
, public CIfrOpHeader
{
2089 EFI_IFR_MATCH
*mMatch
;
2094 ) : CIfrObj (EFI_IFR_MATCH_OP
, (CHAR8
**)&mMatch
),
2095 CIfrOpHeader (EFI_IFR_MATCH_OP
, &mMatch
->Header
) {
2100 class CIfrMultiply
: public CIfrObj
, public CIfrOpHeader
{
2102 EFI_IFR_MULTIPLY
*mMultiply
;
2107 ) : CIfrObj (EFI_IFR_MULTIPLY_OP
, (CHAR8
**)&mMultiply
),
2108 CIfrOpHeader (EFI_IFR_MULTIPLY_OP
, &mMultiply
->Header
) {
2113 class CIfrModulo
: public CIfrObj
, public CIfrOpHeader
{
2115 EFI_IFR_MODULO
*mModulo
;
2120 ) : CIfrObj (EFI_IFR_MODULO_OP
, (CHAR8
**)&mModulo
),
2121 CIfrOpHeader (EFI_IFR_MODULO_OP
, &mModulo
->Header
) {
2126 class CIfrNotEqual
: public CIfrObj
, public CIfrOpHeader
{
2128 EFI_IFR_NOT_EQUAL
*mNotEqual
;
2133 ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP
, (CHAR8
**)&mNotEqual
),
2134 CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP
, &mNotEqual
->Header
) {
2139 class CIfrOr
: public CIfrObj
, public CIfrOpHeader
{
2146 ) : CIfrObj (EFI_IFR_OR_OP
, (CHAR8
**)&mOr
),
2147 CIfrOpHeader (EFI_IFR_OR_OP
, &mOr
->Header
) {
2152 class CIfrShiftLeft
: public CIfrObj
, public CIfrOpHeader
{
2154 EFI_IFR_SHIFT_LEFT
*mShiftLeft
;
2159 ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP
, (CHAR8
**)&mShiftLeft
),
2160 CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP
, &mShiftLeft
->Header
) {
2165 class CIfrShiftRight
: public CIfrObj
, public CIfrOpHeader
{
2167 EFI_IFR_SHIFT_RIGHT
*mShiftRight
;
2172 ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP
, (CHAR8
**)&mShiftRight
),
2173 CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP
, &mShiftRight
->Header
) {
2178 class CIfrSubtract
: public CIfrObj
, public CIfrOpHeader
{
2180 EFI_IFR_SUBTRACT
*mSubtract
;
2185 ) : CIfrObj (EFI_IFR_SUBTRACT_OP
, (CHAR8
**)&mSubtract
),
2186 CIfrOpHeader (EFI_IFR_SUBTRACT_OP
, &mSubtract
->Header
) {
2191 class CIfrConditional
: public CIfrObj
, public CIfrOpHeader
{
2193 EFI_IFR_CONDITIONAL
*mConditional
;
2198 ) : CIfrObj (EFI_IFR_CONDITIONAL_OP
, (CHAR8
**)&mConditional
),
2199 CIfrOpHeader (EFI_IFR_CONDITIONAL_OP
, &mConditional
->Header
) {
2204 class CIfrFind
: public CIfrObj
, public CIfrOpHeader
{
2206 EFI_IFR_FIND
*mFind
;
2211 ) : CIfrObj (EFI_IFR_FIND_OP
, (CHAR8
**)&mFind
),
2212 CIfrOpHeader (EFI_IFR_FIND_OP
, &mFind
->Header
) {
2216 VOID
SetFormat (IN UINT8 Format
) {
2217 mFind
->Format
= Format
;
2221 class CIfrMid
: public CIfrObj
, public CIfrOpHeader
{
2228 ) : CIfrObj (EFI_IFR_MID_OP
, (CHAR8
**)&mMid
),
2229 CIfrOpHeader (EFI_IFR_MID_OP
, &mMid
->Header
) {
2234 class CIfrToken
: public CIfrObj
, public CIfrOpHeader
{
2236 EFI_IFR_TOKEN
*mToken
;
2241 ) : CIfrObj (EFI_IFR_TOKEN_OP
, (CHAR8
**)&mToken
),
2242 CIfrOpHeader (EFI_IFR_TOKEN_OP
, &mToken
->Header
) {
2247 class CIfrSpan
: public CIfrObj
, public CIfrOpHeader
{
2249 EFI_IFR_SPAN
*mSpan
;
2254 ) : CIfrObj (EFI_IFR_SPAN_OP
, (CHAR8
**)&mSpan
),
2255 CIfrOpHeader (EFI_IFR_SPAN_OP
, &mSpan
->Header
) {
2257 mSpan
->Flags
= EFI_IFR_FLAGS_FIRST_MATCHING
;
2260 EFI_VFR_RETURN_CODE
SetFlags (IN UINT8 LFlags
) {
2261 if (_IS_EQUAL (LFlags
, EFI_IFR_FLAGS_FIRST_MATCHING
)) {
2262 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_MATCHING
;
2263 } else if (_FLAG_TEST_AND_CLEAR (LFlags
, EFI_IFR_FLAGS_FIRST_NON_MATCHING
)) {
2264 mSpan
->Flags
|= EFI_IFR_FLAGS_FIRST_NON_MATCHING
;
2267 return _FLAGS_ZERO (LFlags
) ? VFR_RETURN_SUCCESS
: VFR_RETURN_FLAGS_UNSUPPORTED
;