1.1) Bug fixes. (For details, please check Documents & files: Snapshot/Release Notes at https://edk.tianocore.org/servlets/ProjectDocumentList?folderID=43&expandFolder=43&folderID=6) 1.2) Add new UEFI protocol definitions for AbsolutePointer, FormBrowser2, HiiConfigAccess, HiiConfigRouting, HiiDatabase, HiiFont, HiiImage, HiiString, SimpleTextInputEx, DPC protocol. 1.3) Add Smbios 2.5, 2.6 supports. Incompatible changes hilighted: 1) EFI_MANAGED_NETWORK_PROTOCOL_GUID changed. 2) EFI_IP4_IPCONFIG_DATA changed. 2) Add in EdkCompatibilityPkg/EdkCompatibilityPkg.dsc to build all libraries in this package. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4624 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			2253 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2253 lines
		
	
	
		
			60 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _EFIIFRCLASS_H_
 | |
| #define _EFIIFRCLASS_H_
 | |
| 
 | |
| #include "string.h"
 | |
| #include "EfiVfr.h"
 | |
| #include "VfrError.h"
 | |
| #include "VfrUtilityLib.h"
 | |
| 
 | |
| /*
 | |
|  * The functions below are used for flags setting
 | |
|  */
 | |
| static inline BOOLEAN _FLAGS_ZERO (
 | |
|   IN UINT8 &Flags
 | |
|   )
 | |
| {
 | |
|   return Flags == 0;
 | |
| }
 | |
| 
 | |
| static inline VOID _FLAG_CLEAR (
 | |
|   IN UINT8 &Flags,
 | |
|   IN UINT8 Mask
 | |
|   )
 | |
| {
 | |
|   Flags &= (~Mask);
 | |
| }
 | |
| 
 | |
| static inline UINT8 _FLAG_TEST_AND_CLEAR (
 | |
|   IN UINT8 &Flags,
 | |
|   IN UINT8 Mask
 | |
|   )
 | |
| {
 | |
|   UINT8 Ret = Flags & Mask;
 | |
|   Flags &= (~Mask);
 | |
|   return Ret;
 | |
| }
 | |
| 
 | |
| static inline UINT8 _IS_EQUAL (
 | |
|   IN UINT8 &Flags,
 | |
|   IN UINT8 Value
 | |
|   )
 | |
| {
 | |
|   return Flags == Value;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrBin
 | |
|  */
 | |
| typedef enum {
 | |
|   PENDING,
 | |
|   ASSIGNED
 | |
| } ASSIGN_FLAG;
 | |
| 
 | |
| struct SPendingAssign {
 | |
|   INT8                    *mKey;  // key ! unique
 | |
|   VOID                    *mAddr;
 | |
|   UINT32                  mLen;
 | |
|   ASSIGN_FLAG             mFlag;
 | |
|   UINT32                  mLineNo;
 | |
|   struct SPendingAssign   *mNext;
 | |
| 
 | |
|   SPendingAssign (IN INT8 *, IN VOID *, IN UINT32, IN UINT32);
 | |
|   ~SPendingAssign ();
 | |
| 
 | |
|   VOID   SetAddrAndLen (IN VOID *, IN UINT32);
 | |
|   VOID   AssignValue (IN VOID *, IN UINT32);
 | |
|   INT8 * GetKey (VOID);
 | |
| };
 | |
| 
 | |
| struct SBufferNode {
 | |
|   CHAR8              *mBufferStart;
 | |
|   CHAR8              *mBufferEnd;
 | |
|   CHAR8              *mBufferFree;
 | |
|   struct SBufferNode *mNext;
 | |
| };
 | |
| 
 | |
| class CFormPkg {
 | |
| private:
 | |
|   UINT32              mBufferSize;
 | |
|   SBufferNode         *mBufferNodeQueueHead;
 | |
|   SBufferNode         *mBufferNodeQueueTail;
 | |
|   SBufferNode         *mCurrBufferNode;
 | |
| 
 | |
|   SBufferNode         *mReadBufferNode;
 | |
|   UINT32              mReadBufferOffset;
 | |
| 
 | |
|   UINT32              mPkgLength;
 | |
| 
 | |
|   VOID                _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN INT8 *, IN INT8 *, IN UINT32);
 | |
|   VOID                _WRITE_PKG_END (IN FILE *, IN UINT32 , IN INT8 *, IN INT8 *, IN UINT32);
 | |
| 
 | |
| private:
 | |
|   SPendingAssign      *PendingAssignList;
 | |
| 
 | |
| public:
 | |
|   CFormPkg (IN UINT32 BufferSize);
 | |
|   ~CFormPkg ();
 | |
| 
 | |
|   CHAR8             * IfrBinBufferGet (IN UINT32);
 | |
|   inline UINT32       GetPkgLength (VOID);
 | |
| 
 | |
|   VOID                Open ();
 | |
|   UINT32              Read (IN CHAR8 *, IN UINT32);
 | |
|   VOID                Close ();
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE BuildPkgHdr (OUT EFI_HII_PACKAGE_HEADER **);
 | |
|   EFI_VFR_RETURN_CODE BuildPkg (IN FILE *);
 | |
|   EFI_VFR_RETURN_CODE GenCFile (IN INT8 *, IN FILE *);
 | |
| 
 | |
| public:
 | |
|   EFI_VFR_RETURN_CODE AssignPending (IN INT8 *, IN VOID *, IN UINT32, IN UINT32);
 | |
|   VOID                DoPendingAssign (IN INT8 *, IN VOID *, IN UINT32);
 | |
|   bool                HavePendingUnassigned (VOID);
 | |
|   VOID                PendingAssignPrintAll (VOID);
 | |
| };
 | |
| 
 | |
| extern CFormPkg gCFormPkg;
 | |
| 
 | |
| struct SIfrRecord {
 | |
|   UINT32     mLineNo;
 | |
|   CHAR8      *mIfrBinBuf;
 | |
|   UINT8      mBinBufLen;
 | |
|   UINT32     mOffset;
 | |
|   SIfrRecord *mNext;
 | |
| 
 | |
|   SIfrRecord (VOID);
 | |
|   ~SIfrRecord (VOID);
 | |
| };
 | |
| 
 | |
| #define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF
 | |
| #define EFI_IFR_RECORDINFO_IDX_START   0x0
 | |
| 
 | |
| class CIfrRecordInfoDB {
 | |
| private:
 | |
|   bool       mSwitch;
 | |
|   UINT32     mRecordCount;
 | |
|   SIfrRecord *mIfrRecordListHead;
 | |
|   SIfrRecord *mIfrRecordListTail;
 | |
| 
 | |
|   SIfrRecord * GetRecordInfoFromIdx (IN UINT32);
 | |
| public:
 | |
|   CIfrRecordInfoDB (VOID);
 | |
|   ~CIfrRecordInfoDB (VOID);
 | |
| 
 | |
|   inline VOID TurnOn (VOID) {
 | |
|     mSwitch = TRUE;
 | |
|   }
 | |
| 
 | |
|   inline VOID TurnOff (VOID) {
 | |
|     mSwitch = FALSE;
 | |
|   }
 | |
| 
 | |
|   UINT32      IfrRecordRegister (IN UINT32, IN CHAR8 *, IN UINT8, IN UINT32);
 | |
|   VOID        IfrRecordInfoUpdate (IN UINT32, IN UINT32, IN CHAR8*, IN UINT8, IN UINT32);
 | |
|   VOID        IfrRecordOutput (IN FILE *, IN UINT32 LineNo);
 | |
| };
 | |
| 
 | |
| extern CIfrRecordInfoDB gCIfrRecordInfoDB;
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrObj
 | |
|  */
 | |
| extern bool  gCreateOp;
 | |
| 
 | |
| class CIfrObj {
 | |
| private:
 | |
|   bool    mDelayEmit;
 | |
| 
 | |
|   CHAR8   *mObjBinBuf;
 | |
|   UINT8   mObjBinLen;
 | |
|   UINT32  mLineNo;
 | |
|   UINT32  mRecordIdx;
 | |
|   UINT32  mPkgOffset;
 | |
| 
 | |
|   VOID    _EMIT_PENDING_OBJ (VOID);
 | |
| 
 | |
| public:
 | |
|   CIfrObj (IN UINT8 OpCode, OUT CHAR8 **IfrObj = NULL, IN UINT8 ObjBinLen = 0, IN BOOLEAN DelayEmit = FALSE);
 | |
|   virtual ~CIfrObj(VOID);
 | |
| 
 | |
|   inline VOID    SetLineNo (IN UINT32 LineNo) {
 | |
|     mLineNo = LineNo;
 | |
|   }
 | |
| 
 | |
|   inline CHAR8 * GetObjBinAddr (VOID) {
 | |
|     return mObjBinBuf;
 | |
|   }
 | |
| 
 | |
|   inline UINT8   GetObjBinLen (VOID) {
 | |
|     return mObjBinLen;
 | |
|   }
 | |
| 
 | |
|   inline bool ExpendObjBin (IN UINT8 Size) {
 | |
|     if ((mDelayEmit == TRUE) && ((mObjBinLen + Size) > mObjBinLen)) {
 | |
|       mObjBinLen += Size;
 | |
|       return TRUE;
 | |
|     } else {
 | |
|       return FALSE;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrOpHeader
 | |
|  */
 | |
| class CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_OP_HEADER *mHeader;
 | |
| 
 | |
| public:
 | |
|   CIfrOpHeader (IN UINT8 OpCode, IN VOID *StartAddr, IN UINT8 Length = 0);
 | |
|   CIfrOpHeader (IN CIfrOpHeader &);
 | |
| 
 | |
|   VOID IncLength (UINT8 Size) {
 | |
|     if ((mHeader->Length + Size) > mHeader->Length) {
 | |
|       mHeader->Length += Size;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   VOID DecLength (UINT8 Size) {
 | |
|     if (mHeader->Length >= Size) {
 | |
| 	  mHeader -= Size;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   UINT8 GetLength () {
 | |
|     return mHeader->Length;
 | |
|   }
 | |
| 
 | |
|   UINT8 GetScope () {
 | |
|     return mHeader->Scope;
 | |
|   }
 | |
| 
 | |
|   VOID SetScope (IN UINT8 Scope) {
 | |
|     mHeader->Scope = Scope;
 | |
|   }
 | |
| };
 | |
| 
 | |
| extern UINT8 gScopeCount;
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrStatementHeader
 | |
|  */
 | |
| class CIfrStatementHeader {
 | |
| private:
 | |
|   EFI_IFR_STATEMENT_HEADER *mHeader;
 | |
| 
 | |
| public:
 | |
|   CIfrStatementHeader (
 | |
|     IN EFI_IFR_STATEMENT_HEADER *StartAddr
 | |
|   ) : mHeader ((EFI_IFR_STATEMENT_HEADER *)StartAddr) {
 | |
|     mHeader         = StartAddr;
 | |
|     mHeader->Help   = EFI_STRING_ID_INVALID;
 | |
|     mHeader->Prompt = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   EFI_IFR_STATEMENT_HEADER *GetStatementHeader () {
 | |
|     return mHeader;
 | |
|   }
 | |
| 
 | |
|   VOID SetPrompt (IN EFI_STRING_ID Prompt) {
 | |
|     mHeader->Prompt = Prompt;
 | |
|   }
 | |
| 
 | |
|   VOID SetHelp (IN EFI_STRING_ID Help) {
 | |
|     mHeader->Help = Help;
 | |
|   }
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrQuestionHeader
 | |
|  */
 | |
| #define EFI_IFR_QUESTION_FLAG_DEFAULT 0
 | |
| 
 | |
| class CIfrQuestionHeader : public CIfrStatementHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_HEADER *mHeader;
 | |
| 
 | |
|   EFI_IFR_STATEMENT_HEADER * QH2SH (EFI_IFR_QUESTION_HEADER *Qheader) {
 | |
|     return &(Qheader)->Header;
 | |
|   }
 | |
| 
 | |
| public:
 | |
|   EFI_QUESTION_ID QUESTION_ID (VOID) {
 | |
|     return mHeader->QuestionId;
 | |
|   }
 | |
| 
 | |
|   EFI_VARSTORE_ID VARSTORE_ID (VOID) {
 | |
|     return mHeader->VarStoreId;
 | |
|   }
 | |
| 
 | |
|   VOID VARSTORE_INFO (OUT EFI_VARSTORE_INFO *Info) {
 | |
|     if (Info != NULL) {
 | |
|       Info->mVarStoreId   = mHeader->VarStoreId;
 | |
|       memcpy (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   UINT8 FLAGS (VOID) {
 | |
|     return mHeader->Flags;
 | |
|   }
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionHeader (
 | |
|     IN EFI_IFR_QUESTION_HEADER *StartAddr, 
 | |
|     IN UINT8 Flags = EFI_IFR_QUESTION_FLAG_DEFAULT
 | |
|   ) : CIfrStatementHeader (QH2SH(StartAddr)) {
 | |
|     mHeader                         = StartAddr;
 | |
|     mHeader->QuestionId             = EFI_QUESTION_ID_INVALID;
 | |
|     mHeader->VarStoreId             = EFI_VARSTORE_ID_INVALID;
 | |
|     mHeader->VarStoreInfo.VarName   = EFI_STRING_ID_INVALID;
 | |
|     mHeader->VarStoreInfo.VarOffset = EFI_VAROFFSET_INVALID;
 | |
|     mHeader->Flags                  = Flags;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
 | |
|     mHeader->QuestionId = QuestionId;
 | |
|   }
 | |
| 
 | |
|   VOID SetVarStoreInfo (IN EFI_VARSTORE_INFO *Info) {
 | |
|     mHeader->VarStoreId             = Info->mVarStoreId;
 | |
| 	mHeader->VarStoreInfo.VarName   = Info->mInfo.mVarName;
 | |
|     mHeader->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 Flags) {
 | |
|     if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_READ_ONLY)) {
 | |
|       mHeader->Flags |= EFI_IFR_FLAG_READ_ONLY;
 | |
|     }
 | |
| 
 | |
|     _FLAG_CLEAR (Flags, 0x02);
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_CALLBACK)) {
 | |
|       mHeader->Flags |= EFI_IFR_FLAG_CALLBACK;
 | |
|     }
 | |
| 
 | |
|     _FLAG_CLEAR (Flags, 0x08);
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_RESET_REQUIRED)) {
 | |
|       mHeader->Flags |= EFI_IFR_FLAG_RESET_REQUIRED;
 | |
|     }
 | |
| 
 | |
|     _FLAG_CLEAR (Flags, 0x20);
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_OPTIONS_ONLY)) {
 | |
|       mHeader->Flags |= EFI_IFR_FLAG_OPTIONS_ONLY;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (Flags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| static CIfrQuestionHeader *gCurrentQuestion = NULL;
 | |
| 
 | |
| /*
 | |
|  * The definition of CIfrMinMaxStepData
 | |
|  */
 | |
| class CIfrMinMaxStepData {
 | |
| private:
 | |
|   MINMAXSTEP_DATA *mMinMaxStepData;
 | |
| 
 | |
| public:
 | |
|   CIfrMinMaxStepData (MINMAXSTEP_DATA *DataAddr) : mMinMaxStepData (DataAddr) {
 | |
|     mMinMaxStepData->u64.MinValue = 0;
 | |
|     mMinMaxStepData->u64.MaxValue = 0;
 | |
|     mMinMaxStepData->u64.Step     = 0;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinMaxStepData (IN UINT64 MinValue, IN UINT64 MaxValue, IN UINT64 Step) {
 | |
|     mMinMaxStepData->u64.MinValue = MinValue;
 | |
|     mMinMaxStepData->u64.MaxValue = MaxValue;
 | |
|     mMinMaxStepData->u64.Step     = Step;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinMaxStepData (IN UINT32 MinValue, IN UINT32 MaxValue, IN UINT32 Step) {
 | |
|     mMinMaxStepData->u32.MinValue = MinValue;
 | |
|     mMinMaxStepData->u32.MaxValue = MaxValue;
 | |
|     mMinMaxStepData->u32.Step     = Step;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinMaxStepData (IN UINT16 MinValue, IN UINT16 MaxValue, IN UINT16 Step) {
 | |
|     mMinMaxStepData->u16.MinValue = MinValue;
 | |
|     mMinMaxStepData->u16.MaxValue = MaxValue;
 | |
|     mMinMaxStepData->u16.Step     = Step;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinMaxStepData (IN UINT8 MinValue, IN UINT8 MaxValue, IN UINT8 Step) {
 | |
|     mMinMaxStepData->u8.MinValue = MinValue;
 | |
|     mMinMaxStepData->u8.MaxValue = MaxValue;
 | |
|     mMinMaxStepData->u8.Step     = Step;
 | |
|   }
 | |
| 
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * The definition of all of the UEFI IFR Objects
 | |
|  */
 | |
| class CIfrFormSet : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_FORM_SET *mFormSet;
 | |
| 
 | |
| public:
 | |
|   CIfrFormSet () : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet),
 | |
|                    CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header) {
 | |
|     mFormSet->Help         = EFI_STRING_ID_INVALID;
 | |
|     mFormSet->FormSetTitle = EFI_STRING_ID_INVALID;
 | |
|     memset (&mFormSet->Guid, 0, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetGuid (IN EFI_GUID *Guid) {
 | |
|     memcpy (&mFormSet->Guid, Guid, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetFormSetTitle (IN EFI_STRING_ID FormSetTitle) {
 | |
|     mFormSet->FormSetTitle = FormSetTitle;
 | |
|   }
 | |
| 
 | |
|   VOID SetHelp (IN EFI_STRING_ID Help) {
 | |
|     mFormSet->Help = Help;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrEnd : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_END  *mEnd;
 | |
| 
 | |
| public:
 | |
|   CIfrEnd () : CIfrObj (EFI_IFR_END_OP, (CHAR8 **)&mEnd),
 | |
|                CIfrOpHeader (EFI_IFR_END_OP, &mEnd->Header) {}
 | |
| };
 | |
| 
 | |
| class CIfrDefaultStore : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_DEFAULTSTORE *mDefaultStore;
 | |
| 
 | |
| public:
 | |
|   CIfrDefaultStore () : CIfrObj (EFI_IFR_DEFAULTSTORE_OP, (CHAR8 **)&mDefaultStore),
 | |
|                        CIfrOpHeader (EFI_IFR_DEFAULTSTORE_OP, &mDefaultStore->Header) {
 | |
|     mDefaultStore->DefaultId   = EFI_VARSTORE_ID_INVALID;
 | |
|     mDefaultStore->DefaultName = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetDefaultName (IN EFI_STRING_ID DefaultName) {
 | |
|     mDefaultStore->DefaultName = DefaultName;
 | |
|   }
 | |
| 
 | |
|   VOID SetDefaultId (IN UINT16 DefaultId) {
 | |
|     mDefaultStore->DefaultId = DefaultId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| #define EFI_FORM_ID_MAX                    0xFFFF
 | |
| #define EFI_FREE_FORM_ID_BITMAP_SIZE     ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)
 | |
| 
 | |
| class CIfrForm : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_FORM  *mForm;
 | |
| 
 | |
|   STATIC UINT32 FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE];
 | |
| 
 | |
|   STATIC BOOLEAN ChekFormIdFree (IN EFI_FORM_ID FormId) {
 | |
|     UINT32 Index  = (FormId / EFI_BITS_PER_UINT32);
 | |
|     UINT32 Offset = (FormId % EFI_BITS_PER_UINT32);
 | |
| 
 | |
|     return (FormIdBitMap[Index] & (0x80000000 >> Offset)) == 0;
 | |
|   }
 | |
| 
 | |
|   STATIC VOID MarkFormIdUsed (IN EFI_FORM_ID FormId) {
 | |
|     UINT32 Index  = (FormId / EFI_BITS_PER_UINT32);
 | |
|     UINT32 Offset = (FormId % EFI_BITS_PER_UINT32);
 | |
| 
 | |
|     FormIdBitMap[Index] |= (0x80000000 >> Offset);
 | |
|   }
 | |
| 
 | |
| public:
 | |
|   CIfrForm () : CIfrObj (EFI_IFR_FORM_OP, (CHAR8 **)&mForm), 
 | |
|                 CIfrOpHeader (EFI_IFR_FORM_OP, &mForm->Header) {
 | |
|     mForm->FormId    = 0;
 | |
|     mForm->FormTitle = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) {
 | |
|     if (CIfrForm::ChekFormIdFree (FormId) == FALSE) {
 | |
|       return VFR_RETURN_FORMID_REDEFINED;
 | |
|     }
 | |
|     mForm->FormId = FormId;
 | |
|     CIfrForm::MarkFormIdUsed (FormId);
 | |
|     return VFR_RETURN_SUCCESS;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormTitle (IN EFI_STRING_ID FormTitle) {
 | |
|     mForm->FormTitle = FormTitle;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrVarStore : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_VARSTORE *mVarStore;
 | |
| 
 | |
| public:
 | |
|   CIfrVarStore () : CIfrObj (EFI_IFR_VARSTORE_OP, (CHAR8 **)&mVarStore, sizeof (EFI_IFR_VARSTORE), TRUE), 
 | |
|                    CIfrOpHeader (EFI_IFR_VARSTORE_OP, &mVarStore->Header) {
 | |
|     mVarStore->VarStoreId = EFI_VARSTORE_ID_INVALID;
 | |
|     mVarStore->Size       = 0;
 | |
|     memset (&mVarStore->Guid, 0, sizeof (EFI_GUID));
 | |
|     mVarStore->Name[0]    = '\0';
 | |
|   }
 | |
| 
 | |
|   VOID SetGuid (IN EFI_GUID *Guid) {
 | |
|     memcpy (&mVarStore->Guid, Guid, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId) {
 | |
|     mVarStore->VarStoreId = VarStoreId;
 | |
|   }
 | |
| 
 | |
|   VOID SetSize (IN UINT16 Size) {
 | |
|     mVarStore->Size = Size;
 | |
|   }
 | |
| 
 | |
|   VOID SetName (IN INT8 *Name) {
 | |
|     UINT8 Len;
 | |
| 
 | |
|     if (Name != NULL) {
 | |
|       Len = strlen (Name);
 | |
|       if (Len != 0) {
 | |
|         if (ExpendObjBin (Len) == TRUE) {
 | |
|           IncLength (Len);
 | |
|           strcpy ((INT8 *)(mVarStore->Name), Name);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrVarStoreEfi : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_VARSTORE_EFI *mVarStoreEfi;
 | |
| 
 | |
| public:
 | |
|   CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP, (CHAR8 **)&mVarStoreEfi), 
 | |
|                       CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP, &mVarStoreEfi->Header) {
 | |
|     mVarStoreEfi->VarStoreId = EFI_VAROFFSET_INVALID;
 | |
|     memset (&mVarStoreEfi->Guid, 0, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetGuid (IN EFI_GUID *Guid) {
 | |
|     memcpy (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetVarStoreId (IN UINT16 VarStoreId) {
 | |
|     mVarStoreEfi->VarStoreId = VarStoreId;
 | |
|   }
 | |
| 
 | |
|   VOID SetAttributes (IN UINT32 Attributes) {
 | |
|     mVarStoreEfi->Attributes = Attributes;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrVarStoreNameValue : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_VARSTORE_NAME_VALUE *mVarStoreNameValue;
 | |
| 
 | |
| public:
 | |
|   CIfrVarStoreNameValue () : CIfrObj (EFI_IFR_VARSTORE_NAME_VALUE_OP, (CHAR8 **)&mVarStoreNameValue), 
 | |
|                               CIfrOpHeader (EFI_IFR_VARSTORE_NAME_VALUE_OP, &mVarStoreNameValue->Header) {
 | |
|     mVarStoreNameValue->VarStoreId = EFI_VAROFFSET_INVALID;
 | |
|     memset (&mVarStoreNameValue->Guid, 0, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetGuid (IN EFI_GUID *Guid) {
 | |
|     memcpy (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetVarStoreId (IN UINT16 VarStoreId) {
 | |
|     mVarStoreNameValue->VarStoreId = VarStoreId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrImage : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_IMAGE *mImage;
 | |
| 
 | |
| public:
 | |
|   CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP, (CHAR8 **)&mImage),
 | |
|                  CIfrOpHeader (EFI_IFR_FORM_OP, &mImage->Header) {
 | |
|     mImage->Id = EFI_IMAGE_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetImageId (IN EFI_IMAGE_ID ImageId) {
 | |
|     mImage->Id = ImageId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrLocked : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_LOCKED *mLocked;
 | |
| 
 | |
| public:
 | |
|   CIfrLocked () : CIfrObj (EFI_IFR_LOCKED_OP, (CHAR8 **)&mLocked),
 | |
|                   CIfrOpHeader (EFI_IFR_LOCKED_OP, &mLocked->Header) {}
 | |
| };
 | |
| 
 | |
| class CIfrRule : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_RULE *mRule;
 | |
| 
 | |
| public:
 | |
|   CIfrRule () : CIfrObj (EFI_IFR_RULE_OP, (CHAR8 **)&mRule),
 | |
|                 mRule ((EFI_IFR_RULE *)GetObjBinAddr()),
 | |
|                 CIfrOpHeader (EFI_IFR_RULE_OP, &mRule->Header) {
 | |
|     mRule->RuleId = EFI_RULE_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetRuleId (IN UINT8 RuleId) {
 | |
|     mRule->RuleId = RuleId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| static EFI_IFR_TYPE_VALUE gZeroEfiIfrTypeValue = {0, };
 | |
| 
 | |
| class CIfrDefault : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_DEFAULT *mDefault;
 | |
| 
 | |
| public:
 | |
|   CIfrDefault (
 | |
|     IN UINT16             DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD,
 | |
|     IN UINT8              Type      = EFI_IFR_TYPE_OTHER,
 | |
|     IN EFI_IFR_TYPE_VALUE Value     = gZeroEfiIfrTypeValue
 | |
|     ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault),
 | |
|         CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header) {
 | |
|     mDefault->Type      = Type;
 | |
| 	mDefault->Value     = Value;
 | |
|     mDefault->DefaultId = DefaultId;
 | |
|   }
 | |
| 
 | |
|   VOID SetDefaultId (IN UINT16 DefaultId) {
 | |
|     mDefault->DefaultId = DefaultId;
 | |
|   }
 | |
| 
 | |
|   VOID SetType (IN UINT8 Type) {
 | |
|     mDefault->Type = Type;
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
 | |
|     mDefault->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrValue : public CIfrObj, public CIfrOpHeader{
 | |
| private:
 | |
|   EFI_IFR_VALUE *mValue;
 | |
| 
 | |
| public:
 | |
|   CIfrValue () : CIfrObj (EFI_IFR_VALUE_OP, (CHAR8 **)&mValue),
 | |
|                 CIfrOpHeader (EFI_IFR_VALUE_OP, &mValue->Header) {}
 | |
| 
 | |
| };
 | |
| 
 | |
| class CIfrSubtitle : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {
 | |
| private:
 | |
|   EFI_IFR_SUBTITLE   *mSubtitle;
 | |
| 
 | |
| public:
 | |
|   CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP, (CHAR8 **)&mSubtitle),
 | |
|                   CIfrOpHeader (EFI_IFR_SUBTITLE_OP, &mSubtitle->Header),
 | |
| 				  CIfrStatementHeader (&mSubtitle->Statement) {
 | |
|     mSubtitle->Flags = 0;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_FLAGS_HORIZONTAL)) {
 | |
|       mSubtitle->Flags |= EFI_IFR_FLAGS_HORIZONTAL;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrText : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {
 | |
| private:
 | |
|   EFI_IFR_TEXT *mText;
 | |
| 
 | |
| public:
 | |
|   CIfrText () : CIfrObj (EFI_IFR_TEXT_OP, (CHAR8 **)&mText),
 | |
|                CIfrOpHeader (EFI_IFR_TEXT_OP, &mText->Header), 
 | |
|                CIfrStatementHeader (&mText->Statement) {
 | |
|     mText->TextTwo = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetTextTwo (IN EFI_STRING_ID StringId) {
 | |
|     mText->TextTwo = StringId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRef : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_REF *mRef;
 | |
| 
 | |
| public:
 | |
|   CIfrRef () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef),
 | |
|               CIfrOpHeader (EFI_IFR_REF_OP, &mRef->Header), 
 | |
|               CIfrQuestionHeader (&mRef->Question) {
 | |
|     mRef->FormId = 0;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormId (IN EFI_FORM_ID FormId) {
 | |
|     mRef->FormId = FormId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRef2 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_REF2 *mRef2;
 | |
| 
 | |
| public:
 | |
|   CIfrRef2 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef2, sizeof (EFI_IFR_REF2)),
 | |
|                CIfrOpHeader (EFI_IFR_REF_OP, &mRef2->Header, sizeof (EFI_IFR_REF2)), 
 | |
|                CIfrQuestionHeader (&mRef2->Question) {
 | |
|     mRef2->FormId     = 0;
 | |
|     mRef2->QuestionId = EFI_QUESTION_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormId (IN EFI_FORM_ID FormId) {
 | |
|     mRef2->FormId = FormId;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
 | |
|     if (QuestionId == EFI_QUESTION_ID_INVALID) {
 | |
|       return VFR_RETURN_UNDEFINED;
 | |
|     }
 | |
|     mRef2->QuestionId = QuestionId;
 | |
|     return VFR_RETURN_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRef3 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_REF3 *mRef3;
 | |
| 
 | |
| public:
 | |
|   CIfrRef3 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef3, sizeof(EFI_IFR_REF3)),
 | |
|                CIfrOpHeader (EFI_IFR_REF_OP, &mRef3->Header, sizeof (EFI_IFR_REF3)), 
 | |
|                CIfrQuestionHeader (&mRef3->Question) {
 | |
|     mRef3->FormId     = 0;
 | |
|     mRef3->QuestionId = EFI_QUESTION_ID_INVALID;
 | |
|     memset (&mRef3->FormSetId, 0, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetFormId (IN EFI_FORM_ID FormId) {
 | |
|     mRef3->FormId = FormId;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
 | |
|     mRef3->QuestionId = QuestionId;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormSetId (IN EFI_GUID FormSetId) {
 | |
|     mRef3->FormSetId = FormSetId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRef4 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_REF4 *mRef4;
 | |
| 
 | |
| public:
 | |
|   CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef4, sizeof(EFI_IFR_REF3)),
 | |
|                CIfrOpHeader (EFI_IFR_REF_OP, &mRef4->Header, sizeof (EFI_IFR_REF3)), 
 | |
|                CIfrQuestionHeader (&mRef4->Question) {
 | |
|     mRef4->FormId     = 0;
 | |
|     mRef4->QuestionId = EFI_QUESTION_ID_INVALID;
 | |
|     memset (&mRef4->FormSetId, 0, sizeof (EFI_GUID));
 | |
|     mRef4->DevicePath = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormId (IN EFI_FORM_ID FormId) {
 | |
|     mRef4->FormId = FormId;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
 | |
|     mRef4->QuestionId = QuestionId;
 | |
|   }
 | |
| 
 | |
|   VOID SetFormSetId (IN EFI_GUID FormSetId) {
 | |
|     mRef4->FormSetId = FormSetId;
 | |
|   }
 | |
| 
 | |
|   VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {
 | |
|     mRef4->DevicePath = DevicePath;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrResetButton : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {
 | |
| private:
 | |
|   EFI_IFR_RESET_BUTTON *mResetButton;
 | |
| 
 | |
| public:
 | |
|   CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP, (CHAR8 **)&mResetButton),
 | |
|                        CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP, &mResetButton->Header), 
 | |
| 					   CIfrStatementHeader (&mResetButton->Question.Header) {
 | |
|     mResetButton->DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
 | |
|   }
 | |
| 
 | |
|   VOID SetDefaultId (IN UINT16 DefaultId) {
 | |
|     mResetButton->DefaultId = DefaultId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrCheckBox : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader  {
 | |
| private:
 | |
|   EFI_IFR_CHECKBOX *mCheckBox;
 | |
| 
 | |
| public:
 | |
|   CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP, (CHAR8 **)&mCheckBox),
 | |
|                      CIfrOpHeader (EFI_IFR_CHECKBOX_OP, &mCheckBox->Header), 
 | |
|                      CIfrQuestionHeader (&mCheckBox->Question) {
 | |
|     mCheckBox->Flags = EFI_IFR_CHECKBOX_DEFAULT;
 | |
|     gCurrentQuestion = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrCheckBox () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT)) {
 | |
|       mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_CHECKBOX_DEFAULT_MFG)) {
 | |
|       mCheckBox->Flags |= EFI_IFR_CHECKBOX_DEFAULT_MFG;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrAction : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_ACTION *mAction;
 | |
| 
 | |
| public:
 | |
|   CIfrAction () : CIfrObj (EFI_IFR_ACTION_OP, (CHAR8 **)&mAction),
 | |
|                  CIfrOpHeader (EFI_IFR_ACTION_OP, &mAction->Header), 
 | |
|                  CIfrQuestionHeader (&mAction->Question) {
 | |
|     mAction->QuestionConfig = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionConfig (IN EFI_STRING_ID QuestionConfig) {
 | |
|     mAction->QuestionConfig = QuestionConfig;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrDate : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_DATE *mDate;
 | |
| 
 | |
| public:
 | |
|   CIfrDate () : CIfrObj (EFI_IFR_DATE_OP, (CHAR8 **)&mDate),
 | |
|                CIfrOpHeader (EFI_IFR_DATE_OP, &mDate->Header),
 | |
|                CIfrQuestionHeader (&mDate->Question) {
 | |
|     mDate->Flags = 0;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_YEAR_SUPPRESS)) {
 | |
|       mDate->Flags |= EFI_QF_DATE_YEAR_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_MONTH_SUPPRESS)) {
 | |
|       mDate->Flags |= EFI_QF_DATE_MONTH_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_QF_DATE_DAY_SUPPRESS)) {
 | |
|       mDate->Flags |= EFI_QF_DATE_DAY_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_NORMAL)) {
 | |
|       mDate->Flags |= QF_DATE_STORAGE_NORMAL;
 | |
|     } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_TIME)) {
 | |
|       mDate->Flags |= QF_DATE_STORAGE_TIME;
 | |
|     } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_DATE_STORAGE_WAKEUP)) {
 | |
|       mDate->Flags |= QF_DATE_STORAGE_WAKEUP;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrNumeric : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {
 | |
| private:
 | |
|   EFI_IFR_NUMERIC *mNumeric;
 | |
| 
 | |
| public:
 | |
|   CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric),
 | |
|                    CIfrOpHeader (EFI_IFR_NUMERIC_OP, &mNumeric->Header),
 | |
|                    CIfrQuestionHeader (&mNumeric->Question),
 | |
|                    CIfrMinMaxStepData (&mNumeric->data) {
 | |
|     mNumeric->Flags  = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC;
 | |
|     gCurrentQuestion = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrNumeric () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (LFlags & EFI_IFR_DISPLAY) {
 | |
|       mNumeric->Flags = LFlags;
 | |
|     } else {
 | |
|       mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;
 | |
|     }
 | |
|     return VFR_RETURN_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOneOf : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {
 | |
| private:
 | |
|   EFI_IFR_ONE_OF *mOneOf;
 | |
| 
 | |
| public:
 | |
|   CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP, (CHAR8 **)&mOneOf),
 | |
|                  CIfrOpHeader (EFI_IFR_ONE_OF_OP, &mOneOf->Header),
 | |
|                  CIfrQuestionHeader (&mOneOf->Question),
 | |
|                  CIfrMinMaxStepData (&mOneOf->data) {
 | |
|     mOneOf->Flags    = 0;
 | |
|     gCurrentQuestion = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrOneOf () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (LFlags & EFI_IFR_DISPLAY) {
 | |
|       mOneOf->Flags = LFlags;
 | |
|     } else {
 | |
|       mOneOf->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;
 | |
|     }
 | |
|     return VFR_RETURN_SUCCESS;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrString : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_STRING *mString;
 | |
| 
 | |
| public:
 | |
|   CIfrString () : CIfrObj (EFI_IFR_STRING_OP, (CHAR8 **)&mString),
 | |
|                  CIfrOpHeader (EFI_IFR_STRING_OP, &mString->Header),
 | |
|                  CIfrQuestionHeader (&mString->Question) {
 | |
|     mString->Flags   = 0;
 | |
|     mString->MinSize = 0;
 | |
|     mString->MaxSize = 0;
 | |
|     gCurrentQuestion = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrString () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_STRING_MULTI_LINE)) {
 | |
|       mString->Flags |= EFI_IFR_STRING_MULTI_LINE;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinSize (IN UINT8 Flags) {
 | |
|     mString->MinSize = Flags;
 | |
|   }
 | |
| 
 | |
|   VOID SetMaxSize (IN UINT8 MaxSize) {
 | |
|     mString->MaxSize = MaxSize;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrPassword : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_PASSWORD *mPassword;
 | |
| 
 | |
| public:
 | |
|   CIfrPassword () : CIfrObj (EFI_IFR_PASSWORD_OP, (CHAR8 **)&mPassword),
 | |
|                     CIfrOpHeader (EFI_IFR_PASSWORD_OP, &mPassword->Header),
 | |
|                     CIfrQuestionHeader (&mPassword->Question) {
 | |
|     mPassword->MinSize = 0;
 | |
|     mPassword->MaxSize = 0;
 | |
|     gCurrentQuestion   = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrPassword () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   VOID SetMinSize (IN UINT16 MinSize) {
 | |
|     mPassword->MinSize = MinSize;
 | |
|   }
 | |
| 
 | |
|   VOID SetMaxSize (IN UINT16 MaxSize) {
 | |
|     mPassword->MaxSize = MaxSize;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOrderedList : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_ORDERED_LIST *mOrderedList;
 | |
| 
 | |
| public:
 | |
|   CIfrOrderedList () : CIfrObj (EFI_IFR_ORDERED_LIST_OP, (CHAR8 **)&mOrderedList),
 | |
|                       CIfrOpHeader (EFI_IFR_ORDERED_LIST_OP, &mOrderedList->Header),
 | |
|                       CIfrQuestionHeader (&mOrderedList->Question) {
 | |
|     mOrderedList->MaxContainers = 0;
 | |
|     mOrderedList->Flags         = 0;
 | |
|     gCurrentQuestion            = this;
 | |
|   }
 | |
| 
 | |
|   ~CIfrOrderedList () {
 | |
|     gCurrentQuestion = NULL;
 | |
|   }
 | |
| 
 | |
|   VOID SetMaxContainers (IN UINT8 MaxContainers) {
 | |
|     mOrderedList->MaxContainers = MaxContainers;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_UNIQUE_SET)) {
 | |
|       mOrderedList->Flags |= EFI_IFR_UNIQUE_SET;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_NO_EMPTY_SET)) {
 | |
|       mOrderedList->Flags |= EFI_IFR_NO_EMPTY_SET;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrTime : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
 | |
| private:
 | |
|   EFI_IFR_TIME *mTime;
 | |
| 
 | |
| public:
 | |
|   CIfrTime () : CIfrObj (EFI_IFR_TIME_OP, (CHAR8 **)&mTime),
 | |
|                 CIfrOpHeader (EFI_IFR_TIME_OP, &mTime->Header),
 | |
|                 CIfrQuestionHeader (&mTime->Question) {
 | |
|     mTime->Flags = 0;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
 | |
|     EFI_VFR_RETURN_CODE Ret;
 | |
| 
 | |
|     Ret = CIfrQuestionHeader::SetFlags (HFlags);
 | |
|     if (Ret != VFR_RETURN_SUCCESS) {
 | |
|       return Ret;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_HOUR_SUPPRESS)) {
 | |
|       mTime->Flags |= QF_TIME_HOUR_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_MINUTE_SUPPRESS)) {
 | |
|       mTime->Flags |= QF_TIME_MINUTE_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_SECOND_SUPPRESS)) {
 | |
|       mTime->Flags |= QF_TIME_SECOND_SUPPRESS;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_NORMAL)) {
 | |
|       mTime->Flags |= QF_TIME_STORAGE_NORMAL;
 | |
|     } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_TIME)) {
 | |
|       mTime->Flags |= QF_TIME_STORAGE_TIME;
 | |
|     } else if (_FLAG_TEST_AND_CLEAR (LFlags, QF_TIME_STORAGE_WAKEUP)) {
 | |
|       mTime->Flags |= QF_TIME_STORAGE_WAKEUP;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrDisableIf : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_DISABLE_IF *mDisableIf;
 | |
| 
 | |
| public:
 | |
|   CIfrDisableIf () : CIfrObj (EFI_IFR_DISABLE_IF_OP, (CHAR8 **)&mDisableIf),
 | |
|                    mDisableIf ((EFI_IFR_DISABLE_IF *) GetObjBinAddr()),
 | |
|                    CIfrOpHeader (EFI_IFR_DISABLE_IF_OP, &mDisableIf->Header) {}
 | |
| };
 | |
| 
 | |
| class CIfrSuppressIf : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_SUPPRESS_IF *mSuppressIf;
 | |
| 
 | |
| public:
 | |
|   CIfrSuppressIf () : CIfrObj (EFI_IFR_SUPPRESS_IF_OP, (CHAR8 **)&mSuppressIf),
 | |
|                      CIfrOpHeader (EFI_IFR_SUPPRESS_IF_OP, &mSuppressIf->Header) {}
 | |
| };
 | |
| 
 | |
| class CIfrGrayOutIf : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GRAY_OUT_IF *mGrayOutIf;
 | |
| 
 | |
| public:
 | |
|   CIfrGrayOutIf () : CIfrObj (EFI_IFR_GRAY_OUT_IF_OP, (CHAR8 **)&mGrayOutIf),
 | |
|                     CIfrOpHeader (EFI_IFR_GRAY_OUT_IF_OP, &mGrayOutIf->Header) {}
 | |
| };
 | |
| 
 | |
| class CIfrInconsistentIf : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_INCONSISTENT_IF *mInconsistentIf;
 | |
| 
 | |
| public:
 | |
|   CIfrInconsistentIf () : CIfrObj (EFI_IFR_INCONSISTENT_IF_OP, (CHAR8 **)&mInconsistentIf),
 | |
|                         CIfrOpHeader (EFI_IFR_INCONSISTENT_IF_OP, &mInconsistentIf->Header) {
 | |
|     mInconsistentIf->Error = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetError (IN EFI_STRING_ID Error) {
 | |
|     mInconsistentIf->Error = Error;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrNoSubmitIf : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_NO_SUBMIT_IF *mNoSubmitIf;
 | |
| 
 | |
| public:
 | |
|   CIfrNoSubmitIf () : CIfrObj (EFI_IFR_NO_SUBMIT_IF_OP, (CHAR8 **)&mNoSubmitIf),
 | |
|                      CIfrOpHeader (EFI_IFR_NO_SUBMIT_IF_OP, &mNoSubmitIf->Header) {
 | |
|     mNoSubmitIf->Error = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetError (IN EFI_STRING_ID Error) {
 | |
|     mNoSubmitIf->Error = Error;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRefresh : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_REFRESH *mRefresh;
 | |
| 
 | |
| public:
 | |
|   CIfrRefresh () : CIfrObj (EFI_IFR_REFRESH_OP, (CHAR8 **)&mRefresh),
 | |
|                   CIfrOpHeader (EFI_IFR_REFRESH_OP, &mRefresh->Header) {
 | |
|     mRefresh->RefreshInterval = 0;
 | |
|   }
 | |
| 
 | |
|   VOID SetRefreshInterval (IN UINT8 RefreshInterval) {
 | |
|     mRefresh->RefreshInterval = RefreshInterval;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrVarStoreDevice : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_VARSTORE_DEVICE *mVarStoreDevice;
 | |
| 
 | |
| public:
 | |
|   CIfrVarStoreDevice () : CIfrObj (EFI_IFR_VARSTORE_DEVICE_OP, (CHAR8 **)&mVarStoreDevice),
 | |
|                           CIfrOpHeader (EFI_IFR_VARSTORE_DEVICE_OP, &mVarStoreDevice->Header) {
 | |
|     mVarStoreDevice->DevicePath = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {
 | |
|     mVarStoreDevice->DevicePath = DevicePath;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOneOfOption : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_ONE_OF_OPTION *mOneOfOption;
 | |
| 
 | |
| public:
 | |
|   CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP, (CHAR8 **)&mOneOfOption),
 | |
|                        CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP, &mOneOfOption->Header) {
 | |
|     mOneOfOption->Flags  = 0;
 | |
|     mOneOfOption->Option = EFI_STRING_ID_INVALID;
 | |
|     mOneOfOption->Type   = EFI_IFR_TYPE_OTHER;
 | |
|     memset (&mOneOfOption->Value, 0, sizeof (mOneOfOption->Value));
 | |
|   }
 | |
| 
 | |
|   VOID SetOption (IN EFI_STRING_ID Option) {
 | |
|     mOneOfOption->Option = Option;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {
 | |
|       mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;
 | |
|     }
 | |
| 
 | |
|     if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT_MFG)) {
 | |
|       mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT_MFG;
 | |
|     }
 | |
| 
 | |
|     if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_8)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_8);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_8;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_16)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_16);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_16;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_32)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_32);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_32;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_NUM_SIZE_64)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_NUM_SIZE_64);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_NUM_SIZE_64;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_BOOLEAN)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_BOOLEAN);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_BOOLEAN;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_TIME)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_TIME);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_TIME;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_DATE)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_DATE);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_DATE;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_STRING)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_STRING);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_STRING;
 | |
|     } else if (_IS_EQUAL (LFlags, EFI_IFR_TYPE_OTHER)) {
 | |
|       _FLAG_CLEAR (LFlags, EFI_IFR_TYPE_OTHER);
 | |
|       mOneOfOption->Flags |= EFI_IFR_TYPE_OTHER;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| 
 | |
|   VOID SetType (IN UINT8 Type) {
 | |
|     mOneOfOption->Type = Type;
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
 | |
|     mOneOfOption->Value = Value;
 | |
|   }
 | |
| 
 | |
|   UINT8 GetFlags (VOID) {
 | |
|     return mOneOfOption->Flags;
 | |
|   }
 | |
| };
 | |
| 
 | |
| static EFI_GUID IfrTianoGuid = EFI_IFR_TIANO_GUID;
 | |
| 
 | |
| class CIfrClass : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GUID_CLASS *mClass;
 | |
| 
 | |
| public:
 | |
|   CIfrClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mClass, sizeof (EFI_IFR_GUID_CLASS)),
 | |
|                 CIfrOpHeader (EFI_IFR_GUID_OP, &mClass->Header, sizeof (EFI_IFR_GUID_CLASS)) {
 | |
|     mClass->ExtendOpCode = EFI_IFR_EXTEND_OP_CLASS;
 | |
|     mClass->Guid         = IfrTianoGuid;
 | |
|     mClass->Class        = EFI_NON_DEVICE_CLASS;
 | |
|   }
 | |
| 
 | |
|   VOID SetClass (IN UINT16 Class) {
 | |
|     mClass->Class        = Class;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrSubClass : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GUID_SUBCLASS *mSubClass;
 | |
| 
 | |
| public:
 | |
|   CIfrSubClass () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mSubClass, sizeof (EFI_IFR_GUID_SUBCLASS)),
 | |
|                     CIfrOpHeader (EFI_IFR_GUID_OP, &mSubClass->Header, sizeof (EFI_IFR_GUID_SUBCLASS)) {
 | |
|     mSubClass->ExtendOpCode = EFI_IFR_EXTEND_OP_SUBCLASS;
 | |
|     mSubClass->Guid         = IfrTianoGuid;
 | |
|     mSubClass->SubClass     = EFI_SETUP_APPLICATION_SUBCLASS;
 | |
|   }
 | |
| 
 | |
|   VOID SetSubClass (IN UINT16 SubClass) {
 | |
|     mSubClass->SubClass = SubClass;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrLabel : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GUID_LABEL *mLabel;
 | |
| 
 | |
| public:
 | |
|   CIfrLabel () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mLabel, sizeof (EFI_IFR_GUID_LABEL)),
 | |
|                 CIfrOpHeader (EFI_IFR_GUID_OP, &mLabel->Header, sizeof (EFI_IFR_GUID_LABEL)) {
 | |
|     mLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
 | |
|     mLabel->Guid         = IfrTianoGuid;
 | |
|   }
 | |
| 
 | |
|   VOID SetNumber (IN UINT16 Number) {
 | |
|     mLabel->Number = Number;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrBanner : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GUID_BANNER *mBanner;
 | |
| 
 | |
| public:
 | |
|   CIfrBanner () : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mBanner, sizeof (EFI_IFR_GUID_BANNER)),
 | |
|                   CIfrOpHeader (EFI_IFR_GUID_OP, &mBanner->Header, sizeof (EFI_IFR_GUID_BANNER)) {
 | |
|     mBanner->ExtendOpCode = EFI_IFR_EXTEND_OP_BANNER;
 | |
|     mBanner->Guid         = IfrTianoGuid;
 | |
|   }
 | |
| 
 | |
|   VOID SetTitle (IN EFI_STRING_ID StringId) {
 | |
|     mBanner->Title = StringId;
 | |
|   }
 | |
| 
 | |
|   VOID SetLine (IN UINT16 Line) {
 | |
|     mBanner->LineNumber = Line;
 | |
|   }
 | |
| 
 | |
|   VOID SetAlign (IN UINT8 Align) {
 | |
|     mBanner->Alignment = Align;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrTimeout : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GUID_TIMEOUT *mTimeout;
 | |
| 
 | |
| public:
 | |
|   CIfrTimeout (IN UINT16 Timeout = 0) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mTimeout, sizeof (EFI_IFR_GUID_TIMEOUT)),
 | |
|                                         CIfrOpHeader (EFI_IFR_GUID_OP, &mTimeout->Header, sizeof (EFI_IFR_GUID_TIMEOUT)) {
 | |
|     mTimeout->ExtendOpCode = EFI_IFR_EXTEND_OP_TIMEOUT;
 | |
|     mTimeout->Guid         = IfrTianoGuid;
 | |
|     mTimeout->TimeOut      = Timeout;
 | |
|   }
 | |
| 
 | |
|   VOID SetTimeout (IN UINT16 Timeout) {
 | |
|     mTimeout->TimeOut = Timeout;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrDup : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_DUP *mDup;
 | |
| 
 | |
| public:
 | |
|   CIfrDup (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_DUP_OP, (CHAR8 **)&mDup),
 | |
|       CIfrOpHeader (EFI_IFR_DUP_OP, &mDup->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrEqIdId : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_EQ_ID_ID   *mEqIdId;
 | |
| 
 | |
| public:
 | |
|   CIfrEqIdId (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_EQ_ID_ID_OP, (CHAR8 **)&mEqIdId),
 | |
|                  CIfrOpHeader (EFI_IFR_EQ_ID_ID_OP, &mEqIdId->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mEqIdId->QuestionId1 = EFI_QUESTION_ID_INVALID;
 | |
|     mEqIdId->QuestionId2 = EFI_QUESTION_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId1 (
 | |
|   IN EFI_QUESTION_ID QuestionId,
 | |
|   IN INT8            *VarIdStr,
 | |
|   IN UINT32          LineNo
 | |
|   ) {
 | |
|     if (QuestionId != EFI_QUESTION_ID_INVALID) {
 | |
|       mEqIdId->QuestionId1 = QuestionId;
 | |
|     } else {
 | |
|       gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId1), sizeof (EFI_QUESTION_ID), LineNo);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId2 (
 | |
|   IN EFI_QUESTION_ID QuestionId,
 | |
|   IN INT8            *VarIdStr,
 | |
|   IN UINT32          LineNo
 | |
|   ) {
 | |
|     if (QuestionId != EFI_QUESTION_ID_INVALID) {
 | |
|       mEqIdId->QuestionId2 = QuestionId;
 | |
|     } else {
 | |
|       gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId2), sizeof (EFI_QUESTION_ID), LineNo);
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrEqIdVal : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_EQ_ID_VAL *mEqIdVal;
 | |
| 
 | |
| public:
 | |
|   CIfrEqIdVal (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_EQ_ID_VAL_OP, (CHAR8 **)&mEqIdVal),
 | |
|       CIfrOpHeader (EFI_IFR_EQ_ID_VAL_OP, &mEqIdVal->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mEqIdVal->QuestionId = EFI_QUESTION_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (
 | |
|   IN EFI_QUESTION_ID QuestionId,
 | |
|   IN INT8            *VarIdStr,
 | |
|   IN UINT32          LineNo
 | |
|   ) {
 | |
|     if (QuestionId != EFI_QUESTION_ID_INVALID) {
 | |
|       mEqIdVal->QuestionId = QuestionId;
 | |
|     } else {
 | |
|       gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVal->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN UINT16 Value) {
 | |
|     mEqIdVal->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrEqIdList : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_EQ_ID_LIST *mEqIdVList;
 | |
| 
 | |
| public:
 | |
|   CIfrEqIdList (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP, (CHAR8 **)&mEqIdVList, sizeof (EFI_IFR_EQ_ID_LIST), TRUE),
 | |
|                    CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP, &mEqIdVList->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mEqIdVList->QuestionId   = EFI_QUESTION_ID_INVALID;
 | |
|     mEqIdVList->ListLength   = 0;
 | |
|     mEqIdVList->ValueList[0] = 0;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (
 | |
|   IN EFI_QUESTION_ID QuestionId,
 | |
|   IN INT8            *VarIdStr,
 | |
|   IN UINT32          LineNo
 | |
|   ) {
 | |
|     if (QuestionId != EFI_QUESTION_ID_INVALID) {
 | |
|       mEqIdVList->QuestionId = QuestionId;
 | |
|     } else {
 | |
|       gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVList->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   VOID SetListLength (IN UINT16 ListLength) {
 | |
|     mEqIdVList->ListLength = ListLength;
 | |
|   }
 | |
| 
 | |
|   VOID SetValueList (IN UINT16 Index, IN UINT16 Value) {
 | |
|     if (Index == 0) {
 | |
|       mEqIdVList->ValueList[0] = Value;
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     if (ExpendObjBin (sizeof (UINT16)) ==TRUE) {
 | |
|       IncLength (sizeof (UINT16));
 | |
|       mEqIdVList->ValueList[Index] = Value;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrQuestionRef1 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_REF1 *mQuestionRef1;
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionRef1 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_QUESTION_REF1_OP, (CHAR8 **)&mQuestionRef1),
 | |
|       CIfrOpHeader (EFI_IFR_QUESTION_REF1_OP, &mQuestionRef1->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mQuestionRef1->QuestionId = EFI_QUESTION_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetQuestionId (
 | |
|   IN EFI_QUESTION_ID QuestionId,
 | |
|   IN INT8            *VarIdStr,
 | |
|   IN UINT32          LineNo
 | |
|   ) {
 | |
|     if (QuestionId != EFI_QUESTION_ID_INVALID) {
 | |
|       mQuestionRef1->QuestionId = QuestionId;
 | |
|     } else {
 | |
|       gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mQuestionRef1->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrQuestionRef2 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_REF2 *mQuestionRef2;
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionRef2 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_QUESTION_REF2_OP, (CHAR8 **)&mQuestionRef2),
 | |
|       CIfrOpHeader (EFI_IFR_QUESTION_REF2_OP, &mQuestionRef2->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrQuestionRef3 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_REF3 *mQuestionRef3;
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionRef3 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3),
 | |
|       CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrQuestionRef3_2 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_REF3_2 *mQuestionRef3_2;
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionRef3_2 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_2, sizeof (EFI_IFR_QUESTION_REF3_2)),
 | |
|       CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_2->Header, sizeof (EFI_IFR_QUESTION_REF3_2)) {
 | |
|     SetLineNo (LineNo);
 | |
|     mQuestionRef3_2->DevicePath = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {
 | |
|     mQuestionRef3_2->DevicePath = DevicePath;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrQuestionRef3_3 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_QUESTION_REF3_3 *mQuestionRef3_3;
 | |
| 
 | |
| public:
 | |
|   CIfrQuestionRef3_3 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_QUESTION_REF3_OP, (CHAR8 **)&mQuestionRef3_3, sizeof (EFI_IFR_QUESTION_REF3_3)),
 | |
|       CIfrOpHeader (EFI_IFR_QUESTION_REF3_OP, &mQuestionRef3_3->Header, sizeof (EFI_IFR_QUESTION_REF3_3)) {
 | |
|     SetLineNo (LineNo);
 | |
|     mQuestionRef3_3->DevicePath = EFI_STRING_ID_INVALID;
 | |
|     memset (&mQuestionRef3_3->Guid, 0, sizeof (EFI_GUID));
 | |
|   }
 | |
| 
 | |
|   VOID SetDevicePath (IN EFI_STRING_ID DevicePath) {
 | |
|     mQuestionRef3_3->DevicePath = DevicePath;
 | |
|   }
 | |
| 
 | |
|   VOID SetGuid (IN EFI_GUID *Guid) {
 | |
|     mQuestionRef3_3->Guid = *Guid;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrRuleRef : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_RULE_REF *mRuleRef;
 | |
| 
 | |
| public:
 | |
|   CIfrRuleRef (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_RULE_REF_OP, (CHAR8 **)&mRuleRef),
 | |
|       CIfrOpHeader (EFI_IFR_RULE_REF_OP, &mRuleRef->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mRuleRef->RuleId = EFI_RULE_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetRuleId (IN UINT8 RuleId) {
 | |
|     mRuleRef->RuleId = RuleId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrStringRef1 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_STRING_REF1 *mStringRef1;
 | |
| 
 | |
| public:
 | |
|   CIfrStringRef1 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_STRING_REF1_OP, (CHAR8 **)&mStringRef1),
 | |
|       CIfrOpHeader (EFI_IFR_STRING_REF1_OP, &mStringRef1->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mStringRef1->StringId = EFI_STRING_ID_INVALID;
 | |
|   }
 | |
| 
 | |
|   VOID SetStringId (IN EFI_STRING_ID StringId) {
 | |
|     mStringRef1->StringId = StringId;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrStringRef2 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_STRING_REF2 *mStringRef2;
 | |
| 
 | |
| public:
 | |
|   CIfrStringRef2 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_STRING_REF2_OP, (CHAR8 **)&mStringRef2),
 | |
|       CIfrOpHeader (EFI_IFR_STRING_REF2_OP, &mStringRef2->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrThis : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_THIS *mThis;
 | |
| 
 | |
| public:
 | |
|   CIfrThis (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_THIS_OP, (CHAR8 **)&mThis),
 | |
|       CIfrOpHeader (EFI_IFR_THIS_OP, &mThis->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrUint8 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_UINT8 *mUint8;
 | |
| 
 | |
| public:
 | |
|   CIfrUint8 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_UINT8_OP, (CHAR8 **)&mUint8),
 | |
|       CIfrOpHeader (EFI_IFR_UINT8_OP, &mUint8->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN UINT8 Value) {
 | |
|     mUint8->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrUint16 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_UINT16 *mUint16;
 | |
| 
 | |
| public:
 | |
|   CIfrUint16 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_UINT16_OP, (CHAR8 **)&mUint16),
 | |
|       CIfrOpHeader (EFI_IFR_UINT16_OP, &mUint16->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN UINT16 Value) {
 | |
|     mUint16->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrUint32 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_UINT32 *mUint32;
 | |
| 
 | |
| public:
 | |
|   CIfrUint32 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_UINT32_OP, (CHAR8 **)&mUint32),
 | |
|       CIfrOpHeader (EFI_IFR_UINT32_OP, &mUint32->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN UINT32 Value) {
 | |
|     mUint32->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrUint64 : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_UINT64 *mUint64;
 | |
| 
 | |
| public:
 | |
|   CIfrUint64 (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_UINT64_OP, (CHAR8 **)&mUint64),
 | |
|       CIfrOpHeader (EFI_IFR_UINT64_OP, &mUint64->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetValue (IN UINT64 Value) {
 | |
|     mUint64->Value = Value;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrTrue : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TRUE *mTrue;
 | |
| 
 | |
| public:
 | |
|   CIfrTrue (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TRUE_OP, (CHAR8 **)&mTrue),
 | |
|       CIfrOpHeader (EFI_IFR_TRUE_OP, &mTrue->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrFalse : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_FALSE *mFalse;
 | |
| 
 | |
| public:
 | |
|   CIfrFalse (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_FALSE_OP, (CHAR8 **)&mFalse),
 | |
|       CIfrOpHeader (EFI_IFR_FALSE_OP, &mFalse->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOne : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_ONE *mOne;
 | |
| 
 | |
| public:
 | |
|   CIfrOne (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_ONE_OP, (CHAR8 **)&mOne),
 | |
|       CIfrOpHeader (EFI_IFR_ONE_OP, &mOne->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOnes : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_ONES *mOnes;
 | |
| 
 | |
| public:
 | |
|   CIfrOnes (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_ONES_OP, (CHAR8 **)&mOnes),
 | |
|       CIfrOpHeader (EFI_IFR_ONES_OP, &mOnes->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrZero : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_ZERO *mZero;
 | |
| 
 | |
| public:
 | |
|   CIfrZero (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_ZERO_OP, (CHAR8 **)&mZero),
 | |
|       CIfrOpHeader (EFI_IFR_ZERO_OP, &mZero->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrUndefined : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_UNDEFINED *mUndefined;
 | |
| 
 | |
| public:
 | |
|   CIfrUndefined (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_UNDEFINED_OP, (CHAR8 **)&mUndefined),
 | |
|       CIfrOpHeader (EFI_IFR_UNDEFINED_OP, &mUndefined->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrVersion : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_VERSION *mVersion;
 | |
| 
 | |
| public:
 | |
|   CIfrVersion (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_VERSION_OP, (CHAR8 **)&mVersion),
 | |
|       CIfrOpHeader (EFI_IFR_VERSION_OP, &mVersion->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrLength : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_LENGTH *mLength;
 | |
| 
 | |
| public:
 | |
|   CIfrLength (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_LENGTH_OP, (CHAR8 **)&mLength),
 | |
|       CIfrOpHeader (EFI_IFR_LENGTH_OP, &mLength->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrNot : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_NOT *mNot;
 | |
| 
 | |
| public:
 | |
|   CIfrNot (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_NOT_OP, (CHAR8 **)&mNot),
 | |
|       CIfrOpHeader (EFI_IFR_NOT_OP, &mNot->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrBitWiseNot : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_BITWISE_NOT *mBitWise;
 | |
| 
 | |
| public:
 | |
|   CIfrBitWiseNot (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_BITWISE_NOT_OP, (CHAR8 **)&mBitWise),
 | |
|       CIfrOpHeader (EFI_IFR_BITWISE_NOT_OP, &mBitWise->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToBoolean : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TO_BOOLEAN *mToBoolean;
 | |
| 
 | |
| public:
 | |
|   CIfrToBoolean (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TO_BOOLEAN_OP, (CHAR8 **)&mToBoolean),
 | |
|       CIfrOpHeader (EFI_IFR_TO_BOOLEAN_OP, &mToBoolean->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToString : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TO_STRING *mToString;
 | |
| 
 | |
| public:
 | |
|   CIfrToString (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TO_STRING_OP, (CHAR8 **)&mToString),
 | |
|       CIfrOpHeader (EFI_IFR_TO_STRING_OP, &mToString->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetFormat (IN UINT8 Format) {
 | |
|     mToString->Format = Format;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToUint : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TO_UINT *mToUint;
 | |
| 
 | |
| public:
 | |
|   CIfrToUint (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TO_UINT_OP, (CHAR8 **)&mToUint),
 | |
|       CIfrOpHeader (EFI_IFR_TO_UINT_OP, &mToUint->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToUpper : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TO_UPPER *mToUpper;
 | |
| 
 | |
| public:
 | |
|   CIfrToUpper (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TO_UPPER_OP, (CHAR8 **)&mToUpper),
 | |
|       CIfrOpHeader (EFI_IFR_TO_UPPER_OP, &mToUpper->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToLower : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TO_LOWER *mToLower;
 | |
| 
 | |
| public:
 | |
|   CIfrToLower (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TO_LOWER_OP, (CHAR8 **)&mToLower),
 | |
|       CIfrOpHeader (EFI_IFR_TO_LOWER_OP, &mToLower->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrAdd : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_ADD *mAdd;
 | |
| 
 | |
| public:
 | |
|   CIfrAdd (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_ADD_OP, (CHAR8 **)&mAdd),
 | |
|       CIfrOpHeader (EFI_IFR_ADD_OP, &mAdd->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrBitWiseAnd : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_BITWISE_AND *mBitWiseAnd;
 | |
| 
 | |
| public:
 | |
|   CIfrBitWiseAnd (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_BITWISE_AND_OP, (CHAR8 **)&mBitWiseAnd),
 | |
|       CIfrOpHeader (EFI_IFR_BITWISE_AND_OP, &mBitWiseAnd->Header) {
 | |
|     SetLineNo(LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrBitWiseOr : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_BITWISE_OR *mBitWiseOr;
 | |
| 
 | |
| public:
 | |
|   CIfrBitWiseOr (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_BITWISE_OR_OP, (CHAR8 **)&mBitWiseOr),
 | |
|       CIfrOpHeader (EFI_IFR_BITWISE_OR_OP, &mBitWiseOr->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrAnd : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_AND *mAnd;
 | |
| 
 | |
| public:
 | |
|   CIfrAnd (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_AND_OP, (CHAR8 **)&mAnd),
 | |
|       CIfrOpHeader (EFI_IFR_AND_OP, &mAnd->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrCatenate : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_CATENATE *mCatenate;
 | |
| 
 | |
| public:
 | |
|   CIfrCatenate (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_CATENATE_OP, (CHAR8 **)&mCatenate),
 | |
|       CIfrOpHeader (EFI_IFR_CATENATE_OP, &mCatenate->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrDivide : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_DIVIDE *mDivide;
 | |
| 
 | |
| public:
 | |
|   CIfrDivide (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_DIVIDE_OP, (CHAR8 **)&mDivide),
 | |
|       CIfrOpHeader (EFI_IFR_DIVIDE_OP, &mDivide->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrEqual : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_EQUAL *mEqual;
 | |
| 
 | |
| public:
 | |
|   CIfrEqual (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_EQUAL_OP, (CHAR8 **)&mEqual),
 | |
|       CIfrOpHeader (EFI_IFR_EQUAL_OP, &mEqual->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrGreaterEqual : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GREATER_EQUAL *mGreaterEqual;
 | |
| 
 | |
| public:
 | |
|   CIfrGreaterEqual (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_GREATER_EQUAL_OP, (CHAR8 **)&mGreaterEqual),
 | |
|       CIfrOpHeader (EFI_IFR_GREATER_EQUAL_OP, &mGreaterEqual->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrGreaterThan : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_GREATER_THAN *mGreaterThan;
 | |
| 
 | |
| public:
 | |
|   CIfrGreaterThan (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_GREATER_THAN_OP, (CHAR8 **)&mGreaterThan),
 | |
|       CIfrOpHeader (EFI_IFR_GREATER_THAN_OP, &mGreaterThan->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrLessEqual : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_LESS_EQUAL *mLessEqual;
 | |
| 
 | |
| public:
 | |
|   CIfrLessEqual (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_LESS_EQUAL_OP, (CHAR8 **)&mLessEqual),
 | |
|       CIfrOpHeader (EFI_IFR_LESS_EQUAL_OP, &mLessEqual->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrLessThan : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_LESS_THAN *mLessThan;
 | |
| 
 | |
| public:
 | |
|   CIfrLessThan (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_LESS_THAN_OP, (CHAR8 **)&mLessThan),
 | |
|       CIfrOpHeader (EFI_IFR_LESS_THAN_OP, &mLessThan->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrMatch : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_MATCH *mMatch;
 | |
| 
 | |
| public:
 | |
|   CIfrMatch (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_MATCH_OP, (CHAR8 **)&mMatch),
 | |
|       CIfrOpHeader (EFI_IFR_MATCH_OP, &mMatch->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrMultiply : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_MULTIPLY *mMultiply;
 | |
| 
 | |
| public:
 | |
|   CIfrMultiply (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_MULTIPLY_OP, (CHAR8 **)&mMultiply),
 | |
|       CIfrOpHeader (EFI_IFR_MULTIPLY_OP, &mMultiply->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrModulo : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_MODULO *mModulo;
 | |
| 
 | |
| public:
 | |
|   CIfrModulo (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_MODULO_OP, (CHAR8 **)&mModulo),
 | |
|       CIfrOpHeader (EFI_IFR_MODULO_OP, &mModulo->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrNotEqual : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_NOT_EQUAL *mNotEqual;
 | |
| 
 | |
| public:
 | |
|   CIfrNotEqual (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_NOT_EQUAL_OP, (CHAR8 **)&mNotEqual),
 | |
|       CIfrOpHeader (EFI_IFR_NOT_EQUAL_OP, &mNotEqual->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrOr : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_OR *mOr;
 | |
| 
 | |
| public:
 | |
|   CIfrOr (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_OR_OP, (CHAR8 **)&mOr),
 | |
|       CIfrOpHeader (EFI_IFR_OR_OP, &mOr->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrShiftLeft : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_SHIFT_LEFT *mShiftLeft;
 | |
| 
 | |
| public:
 | |
|   CIfrShiftLeft (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_SHIFT_LEFT_OP, (CHAR8 **)&mShiftLeft),
 | |
|       CIfrOpHeader (EFI_IFR_SHIFT_LEFT_OP, &mShiftLeft->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrShiftRight : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_SHIFT_RIGHT *mShiftRight;
 | |
| 
 | |
| public:
 | |
|   CIfrShiftRight (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_SHIFT_RIGHT_OP, (CHAR8 **)&mShiftRight),
 | |
|       CIfrOpHeader (EFI_IFR_SHIFT_RIGHT_OP, &mShiftRight->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrSubtract : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_SUBTRACT *mSubtract;
 | |
| 
 | |
| public:
 | |
|   CIfrSubtract (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_SUBTRACT_OP, (CHAR8 **)&mSubtract),
 | |
|       CIfrOpHeader (EFI_IFR_SUBTRACT_OP, &mSubtract->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrConditional : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_CONDITIONAL *mConditional;
 | |
| 
 | |
| public:
 | |
|   CIfrConditional (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_CONDITIONAL_OP, (CHAR8 **)&mConditional),
 | |
|       CIfrOpHeader (EFI_IFR_CONDITIONAL_OP, &mConditional->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrFind : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_FIND *mFind;
 | |
| 
 | |
| public:
 | |
|   CIfrFind (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_FIND_OP, (CHAR8 **)&mFind),
 | |
|       CIfrOpHeader (EFI_IFR_FIND_OP, &mFind->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| 
 | |
|   VOID SetFormat (IN UINT8 Format) {
 | |
|     mFind->Format = Format;
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrMid : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_MID *mMid;
 | |
| 
 | |
| public:
 | |
|   CIfrMid (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_MID_OP, (CHAR8 **)&mMid),
 | |
|       CIfrOpHeader (EFI_IFR_MID_OP, &mMid->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrToken : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_TOKEN *mToken;
 | |
| 
 | |
| public:
 | |
|   CIfrToken (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_TOKEN_OP, (CHAR8 **)&mToken),
 | |
|       CIfrOpHeader (EFI_IFR_TOKEN_OP, &mToken->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CIfrSpan : public CIfrObj, public CIfrOpHeader {
 | |
| private:
 | |
|   EFI_IFR_SPAN *mSpan;
 | |
| 
 | |
| public:
 | |
|   CIfrSpan (
 | |
|   IN UINT32 LineNo
 | |
|   ) : CIfrObj (EFI_IFR_SPAN_OP, (CHAR8 **)&mSpan),
 | |
|       CIfrOpHeader (EFI_IFR_SPAN_OP, &mSpan->Header) {
 | |
|     SetLineNo (LineNo);
 | |
|     mSpan->Flags = EFI_IFR_FLAGS_FIRST_MATCHING;
 | |
|   }
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {
 | |
|     if (_IS_EQUAL (LFlags, EFI_IFR_FLAGS_FIRST_MATCHING)) {
 | |
|       mSpan->Flags |= EFI_IFR_FLAGS_FIRST_MATCHING;
 | |
|     } else if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_FLAGS_FIRST_NON_MATCHING)) {
 | |
|       mSpan->Flags |= EFI_IFR_FLAGS_FIRST_NON_MATCHING;
 | |
|     }
 | |
| 
 | |
|     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
 | |
|   }
 | |
| };
 | |
| 
 | |
| #endif
 |