]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrFormPkg.h
Sync BaseTools Branch (version r2271) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.h
index 3f387666bd50d9d03abc0cd7b48945f0641b9ceb..f908718c029bfbf2d7f72b4d717cfb880a67fe76 100644 (file)
@@ -2,8 +2,8 @@
   \r
   The definition of CFormPkg's member function\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -81,7 +81,7 @@ struct SPendingAssign {
   CHAR8                   *mMsg;\r
   struct SPendingAssign   *mNext;\r
 \r
-  SPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CHAR8 *);\r
+  SPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *);\r
   ~SPendingAssign ();\r
 \r
   VOID   SetAddrAndLen (IN VOID *, IN UINT32);\r
@@ -96,6 +96,11 @@ struct SBufferNode {
   struct SBufferNode *mNext;\r
 };\r
 \r
+typedef struct {\r
+  BOOLEAN  CompatibleMode;\r
+  EFI_GUID *OverrideClassGuid;\r
+} INPUT_INFO_TO_SYNTAX;\r
+\r
 class CFormPkg {\r
 private:\r
   UINT32              mBufferSize;\r
@@ -108,8 +113,8 @@ private:
 \r
   UINT32              mPkgLength;\r
 \r
-  VOID                _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
-  VOID                _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  VOID                _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  VOID                _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
 \r
 private:\r
   SPendingAssign      *PendingAssignList;\r
@@ -131,7 +136,7 @@ public:
   EFI_VFR_RETURN_CODE GenCFile (IN CHAR8 *, IN FILE *, IN PACKAGE_DATA *PkgData = NULL);\r
 \r
 public:\r
-  EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CHAR8 *Msg = NULL);\r
+  EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *Msg = NULL);\r
   VOID                DoPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32);\r
   bool                HavePendingUnassigned (VOID);\r
   VOID                PendingAssignPrintAll (VOID);\r
@@ -144,7 +149,8 @@ public:
     );\r
 };\r
 \r
-extern CFormPkg gCFormPkg;\r
+extern CFormPkg       gCFormPkg;\r
+extern CVfrStringDB   gCVfrStringDB;\r
 \r
 struct SIfrRecord {\r
   UINT32     mLineNo;\r
@@ -195,11 +201,11 @@ extern CIfrRecordInfoDB gCIfrRecordInfoDB;
 /*\r
  * The definition of CIfrObj\r
  */\r
-extern bool  gCreateOp;\r
+extern BOOLEAN  gCreateOp;\r
 \r
 class CIfrObj {\r
 private:\r
-  bool    mDelayEmit;\r
+  BOOLEAN mDelayEmit;\r
 \r
   CHAR8   *mObjBinBuf;\r
   UINT8   mObjBinLen;\r
@@ -227,7 +233,16 @@ public:
 \r
   inline bool ExpendObjBin (IN UINT8 Size) {\r
     if ((mDelayEmit == TRUE) && ((mObjBinLen + Size) > mObjBinLen)) {\r
-      mObjBinLen += Size;\r
+      mObjBinLen = mObjBinLen + Size;\r
+      return TRUE;\r
+    } else {\r
+      return FALSE;\r
+    }\r
+  }\r
+\r
+  inline bool ShrinkObjBin (IN UINT8 Size) {\r
+    if ((mDelayEmit == TRUE) && (mObjBinLen > Size)) {\r
+      mObjBinLen -= Size;\r
       return TRUE;\r
     } else {\r
       return FALSE;\r
@@ -248,13 +263,13 @@ public:
 \r
   VOID IncLength (UINT8 Size) {\r
     if ((mHeader->Length + Size) > mHeader->Length) {\r
-      mHeader->Length += Size;\r
+      mHeader->Length = mHeader->Length + Size;\r
     }\r
   }\r
 \r
   VOID DecLength (UINT8 Size) {\r
     if (mHeader->Length >= Size) {\r
-         mHeader -= Size;\r
+      mHeader->Length -= Size;\r
     }\r
   }\r
 \r
@@ -358,7 +373,7 @@ public:
 \r
   VOID SetVarStoreInfo (IN EFI_VARSTORE_INFO *Info) {\r
     mHeader->VarStoreId             = Info->mVarStoreId;\r
-         mHeader->VarStoreInfo.VarName   = Info->mInfo.mVarName;\r
+    mHeader->VarStoreInfo.VarName   = Info->mInfo.mVarName;\r
     mHeader->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
   }\r
 \r
@@ -398,54 +413,166 @@ public:
   }\r
 };\r
 \r
-static CIfrQuestionHeader *gCurrentQuestion = NULL;\r
-\r
 /*\r
  * The definition of CIfrMinMaxStepData\r
  */\r
 class CIfrMinMaxStepData {\r
 private:\r
   MINMAXSTEP_DATA *mMinMaxStepData;\r
+  BOOLEAN         ValueIsSet;\r
+  BOOLEAN         IsNumeric;\r
 \r
 public:\r
-  CIfrMinMaxStepData (MINMAXSTEP_DATA *DataAddr) : mMinMaxStepData (DataAddr) {\r
+  CIfrMinMaxStepData (MINMAXSTEP_DATA *DataAddr, BOOLEAN NumericOpcode=FALSE) : mMinMaxStepData (DataAddr) {\r
     mMinMaxStepData->u64.MinValue = 0;\r
     mMinMaxStepData->u64.MaxValue = 0;\r
     mMinMaxStepData->u64.Step     = 0;\r
+    ValueIsSet = FALSE;\r
+    IsNumeric = NumericOpcode;\r
   }\r
 \r
   VOID SetMinMaxStepData (IN UINT64 MinValue, IN UINT64 MaxValue, IN UINT64 Step) {\r
-    mMinMaxStepData->u64.MinValue = MinValue;\r
-    mMinMaxStepData->u64.MaxValue = MaxValue;\r
-    mMinMaxStepData->u64.Step     = Step;\r
+    if (!ValueIsSet) {\r
+      mMinMaxStepData->u64.MinValue = MinValue;\r
+      mMinMaxStepData->u64.MaxValue = MaxValue;\r
+      ValueIsSet = TRUE;\r
+    } else {\r
+      if (MinValue < mMinMaxStepData->u64.MinValue) {\r
+        mMinMaxStepData->u64.MinValue = MinValue;\r
+      }\r
+      if (MaxValue > mMinMaxStepData->u64.MaxValue) {\r
+        mMinMaxStepData->u64.MaxValue = MaxValue;\r
+      }\r
+    }\r
+    mMinMaxStepData->u64.Step = Step;\r
   }\r
 \r
   VOID SetMinMaxStepData (IN UINT32 MinValue, IN UINT32 MaxValue, IN UINT32 Step) {\r
-    mMinMaxStepData->u32.MinValue = MinValue;\r
-    mMinMaxStepData->u32.MaxValue = MaxValue;\r
-    mMinMaxStepData->u32.Step     = Step;\r
+    if (!ValueIsSet) {\r
+      mMinMaxStepData->u32.MinValue = MinValue;\r
+      mMinMaxStepData->u32.MaxValue = MaxValue;\r
+      ValueIsSet = TRUE;\r
+    } else {\r
+      if (MinValue < mMinMaxStepData->u32.MinValue) {\r
+        mMinMaxStepData->u32.MinValue = MinValue;\r
+      }\r
+      if (MaxValue > mMinMaxStepData->u32.MaxValue) {\r
+        mMinMaxStepData->u32.MaxValue = MaxValue;\r
+      }\r
+    }\r
+    mMinMaxStepData->u32.Step = Step;\r
   }\r
 \r
   VOID SetMinMaxStepData (IN UINT16 MinValue, IN UINT16 MaxValue, IN UINT16 Step) {\r
-    mMinMaxStepData->u16.MinValue = MinValue;\r
-    mMinMaxStepData->u16.MaxValue = MaxValue;\r
-    mMinMaxStepData->u16.Step     = Step;\r
+    if (!ValueIsSet) {\r
+      mMinMaxStepData->u16.MinValue = MinValue;\r
+      mMinMaxStepData->u16.MaxValue = MaxValue;\r
+      ValueIsSet = TRUE;\r
+    } else {\r
+      if (MinValue < mMinMaxStepData->u16.MinValue) {\r
+        mMinMaxStepData->u16.MinValue = MinValue;\r
+      }\r
+      if (MaxValue > mMinMaxStepData->u16.MaxValue) {\r
+        mMinMaxStepData->u16.MaxValue = MaxValue;\r
+      }\r
+    }\r
+    mMinMaxStepData->u16.Step = Step;\r
   }\r
 \r
   VOID SetMinMaxStepData (IN UINT8 MinValue, IN UINT8 MaxValue, IN UINT8 Step) {\r
-    mMinMaxStepData->u8.MinValue = MinValue;\r
-    mMinMaxStepData->u8.MaxValue = MaxValue;\r
-    mMinMaxStepData->u8.Step     = Step;\r
+    if (!ValueIsSet) {\r
+      mMinMaxStepData->u8.MinValue = MinValue;\r
+      mMinMaxStepData->u8.MaxValue = MaxValue;\r
+      ValueIsSet = TRUE;\r
+    } else {\r
+      if (MinValue < mMinMaxStepData->u8.MinValue) {\r
+        mMinMaxStepData->u8.MinValue = MinValue;\r
+      }\r
+      if (MaxValue > mMinMaxStepData->u8.MaxValue) {\r
+        mMinMaxStepData->u8.MaxValue = MaxValue;\r
+      }\r
+    }\r
+    mMinMaxStepData->u8.Step = Step;\r
+  }\r
+\r
+  UINT64 GetMinData (UINT8 VarType) {\r
+    UINT64 MinValue = 0;\r
+    switch (VarType) {\r
+    case EFI_IFR_TYPE_NUM_SIZE_64:\r
+      MinValue = mMinMaxStepData->u64.MinValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_32:\r
+      MinValue = (UINT64) mMinMaxStepData->u32.MinValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_16:\r
+      MinValue = (UINT64) mMinMaxStepData->u16.MinValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_8:\r
+      MinValue = (UINT64) mMinMaxStepData->u8.MinValue;\r
+      break;\r
+    default:\r
+      break;\r
+    }\r
+    return MinValue;\r
+  }\r
+\r
+  UINT64 GetMaxData (UINT8 VarType) {\r
+    UINT64 MaxValue = 0;\r
+    switch (VarType) {\r
+    case EFI_IFR_TYPE_NUM_SIZE_64:\r
+      MaxValue = mMinMaxStepData->u64.MaxValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_32:\r
+      MaxValue = (UINT64) mMinMaxStepData->u32.MaxValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_16:\r
+      MaxValue = (UINT64) mMinMaxStepData->u16.MaxValue;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_8:\r
+      MaxValue = (UINT64) mMinMaxStepData->u8.MaxValue;\r
+      break;\r
+    default:\r
+      break;\r
+    }\r
+    return MaxValue;\r
+  }\r
+\r
+  UINT64 GetStepData (UINT8 VarType) {\r
+    UINT64 MaxValue = 0;\r
+    switch (VarType) {\r
+    case EFI_IFR_TYPE_NUM_SIZE_64:\r
+      MaxValue = mMinMaxStepData->u64.Step;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_32:\r
+      MaxValue = (UINT64) mMinMaxStepData->u32.Step;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_16:\r
+      MaxValue = (UINT64) mMinMaxStepData->u16.Step;\r
+      break;\r
+    case EFI_IFR_TYPE_NUM_SIZE_8:\r
+      MaxValue = (UINT64) mMinMaxStepData->u8.Step;\r
+      break;\r
+    default:\r
+      break;\r
+    }\r
+    return MaxValue;\r
   }\r
 \r
+  BOOLEAN IsNumericOpcode () {\r
+    return IsNumeric;\r
+  }\r
 };\r
 \r
+static CIfrQuestionHeader *gCurrentQuestion  = NULL;\r
+static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;\r
+\r
 /*\r
  * The definition of all of the UEFI IFR Objects\r
  */\r
 class CIfrFormSet : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_FORM_SET *mFormSet;\r
+  EFI_GUID *mClassGuid;\r
 \r
 public:\r
   CIfrFormSet (UINT8 Size) : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet, Size),\r
@@ -454,6 +581,7 @@ public:
     mFormSet->FormSetTitle = EFI_STRING_ID_INVALID;\r
     mFormSet->Flags        = 0;\r
     memset (&mFormSet->Guid, 0, sizeof (EFI_GUID));\r
+    mClassGuid = (EFI_GUID *) (mFormSet + 1);\r
   }\r
 \r
   VOID SetGuid (IN EFI_GUID *Guid) {\r
@@ -469,7 +597,7 @@ public:
   }\r
 \r
   VOID SetClassGuid (IN EFI_GUID *Guid) {\r
-    memcpy (&(mFormSet->ClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
+    memcpy (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
   }\r
 \r
   UINT8 GetFlags() {\r
@@ -509,10 +637,8 @@ public:
 #define EFI_FORM_ID_MAX                    0xFFFF\r
 #define EFI_FREE_FORM_ID_BITMAP_SIZE     ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
 \r
-class CIfrForm : public CIfrObj, public CIfrOpHeader {\r
-private:\r
-  EFI_IFR_FORM  *mForm;\r
-\r
+class CIfrFormId {\r
+public:\r
   STATIC UINT32 FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE];\r
 \r
   STATIC BOOLEAN ChekFormIdFree (IN EFI_FORM_ID FormId) {\r
@@ -528,6 +654,11 @@ private:
 \r
     FormIdBitMap[Index] |= (0x80000000 >> Offset);\r
   }\r
+};\r
+\r
+class CIfrForm : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_FORM  *mForm;\r
 \r
 public:\r
   CIfrForm () : CIfrObj (EFI_IFR_FORM_OP, (CHAR8 **)&mForm), \r
@@ -537,11 +668,17 @@ public:
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) {\r
-    if (CIfrForm::ChekFormIdFree (FormId) == FALSE) {\r
+    if (FormId == 0) {\r
+      //\r
+      // FormId can't be 0.\r
+      //\r
+      return VFR_RETURN_INVALID_PARAMETER;\r
+    }\r
+    if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) {\r
       return VFR_RETURN_FORMID_REDEFINED;\r
     }\r
     mForm->FormId = FormId;\r
-    CIfrForm::MarkFormIdUsed (FormId);\r
+    CIfrFormId::MarkFormIdUsed (FormId);\r
     return VFR_RETURN_SUCCESS;\r
   }\r
 \r
@@ -550,6 +687,44 @@ public:
   }\r
 };\r
 \r
+class CIfrFormMap : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_FORM_MAP        *mFormMap;\r
+  EFI_IFR_FORM_MAP_METHOD *mMethodMap;\r
+\r
+public:\r
+  CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP, (CHAR8 **)&mFormMap, sizeof (EFI_IFR_FORM_MAP), TRUE), \r
+                   CIfrOpHeader (EFI_IFR_FORM_MAP_OP, &mFormMap->Header) {\r
+    mFormMap->FormId = 0;\r
+    mMethodMap       = (EFI_IFR_FORM_MAP_METHOD *) (mFormMap + 1);\r
+  }\r
+\r
+  EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) {\r
+    if (FormId == 0) {\r
+      //\r
+      // FormId can't be 0.\r
+      //\r
+      return VFR_RETURN_INVALID_PARAMETER;\r
+    }\r
+    if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) {\r
+      return VFR_RETURN_FORMID_REDEFINED;\r
+    }\r
+    mFormMap->FormId = FormId;\r
+    CIfrFormId::MarkFormIdUsed (FormId);\r
+    return VFR_RETURN_SUCCESS;\r
+  }\r
+\r
+  VOID SetFormMapMethod (IN EFI_STRING_ID MethodTitle, IN EFI_GUID *MethodGuid) {\r
+    if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD))) {\r
+      IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD));\r
+\r
+      mMethodMap->MethodTitle = MethodTitle;\r
+      memcpy (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));\r
+      mMethodMap ++;\r
+    }\r
+  }\r
+};\r
+\r
 class CIfrVarStore : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_VARSTORE *mVarStore;\r
@@ -579,7 +754,7 @@ public:
     UINT8 Len;\r
 \r
     if (Name != NULL) {\r
-      Len = strlen (Name);\r
+      Len = (UINT8) strlen (Name);\r
       if (Len != 0) {\r
         if (ExpendObjBin (Len) == TRUE) {\r
           IncLength (Len);\r
@@ -595,10 +770,12 @@ private:
   EFI_IFR_VARSTORE_EFI *mVarStoreEfi;\r
 \r
 public:\r
-  CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP, (CHAR8 **)&mVarStoreEfi), \r
+  CIfrVarStoreEfi () : CIfrObj (EFI_IFR_VARSTORE_EFI_OP, (CHAR8 **)&mVarStoreEfi, sizeof (EFI_IFR_VARSTORE_EFI), TRUE),\r
                       CIfrOpHeader (EFI_IFR_VARSTORE_EFI_OP, &mVarStoreEfi->Header) {\r
     mVarStoreEfi->VarStoreId = EFI_VAROFFSET_INVALID;\r
+    mVarStoreEfi->Size       = 0;\r
     memset (&mVarStoreEfi->Guid, 0, sizeof (EFI_GUID));\r
+    mVarStoreEfi->Name[0]    = '\0';\r
   }\r
 \r
   VOID SetGuid (IN EFI_GUID *Guid) {\r
@@ -612,6 +789,36 @@ public:
   VOID SetAttributes (IN UINT32 Attributes) {\r
     mVarStoreEfi->Attributes = Attributes;\r
   }\r
+  VOID SetSize (IN UINT16 Size) {\r
+    mVarStoreEfi->Size = Size;\r
+  }\r
+\r
+  VOID SetName (IN CHAR8 *Name) {\r
+    UINT8 Len;\r
+\r
+    if (Name != NULL) {\r
+      Len = (UINT8) strlen (Name);\r
+      if (Len != 0) {\r
+        if (ExpendObjBin (Len) == TRUE) {\r
+          IncLength (Len);\r
+          strcpy ((CHAR8 *)(mVarStoreEfi->Name), Name);\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  VOID SetBinaryLength (IN UINT16 Size) {\r
+    UINT16 Len;\r
+\r
+    Len = sizeof (EFI_IFR_VARSTORE_EFI);\r
+    if (Size > Len) {\r
+      ExpendObjBin(Size - Len);\r
+      IncLength(Size - Len);\r
+    } else {\r
+      ShrinkObjBin(Len - Size);\r
+      DecLength(Len - Size);\r
+    }\r
+  }\r
 };\r
 \r
 class CIfrVarStoreNameValue : public CIfrObj, public CIfrOpHeader {\r
@@ -649,6 +856,17 @@ public:
   }\r
 };\r
 \r
+class CIfrModal : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_MODAL *mModal;\r
+\r
+public:\r
+  CIfrModal () : CIfrObj (EFI_IFR_MODAL_TAG_OP, (CHAR8 **)&mModal),\r
+                 CIfrOpHeader (EFI_IFR_MODAL_TAG_OP, &mModal->Header) {\r
+  }\r
+};\r
+\r
+\r
 class CIfrLocked : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_LOCKED *mLocked;\r
@@ -688,7 +906,7 @@ public:
     ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault),\r
         CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header) {\r
     mDefault->Type      = Type;\r
-         mDefault->Value     = Value;\r
+    mDefault->Value     = Value;\r
     mDefault->DefaultId = DefaultId;\r
   }\r
 \r
@@ -715,6 +933,66 @@ public:
 \r
 };\r
 \r
+class CIfrRead : public CIfrObj, public CIfrOpHeader{\r
+private:\r
+  EFI_IFR_READ *mRead;\r
+\r
+public:\r
+  CIfrRead () : CIfrObj (EFI_IFR_READ_OP, (CHAR8 **)&mRead),\r
+                CIfrOpHeader (EFI_IFR_READ_OP, &mRead->Header) {}\r
+\r
+};\r
+\r
+class CIfrWrite : public CIfrObj, public CIfrOpHeader{\r
+private:\r
+  EFI_IFR_WRITE *mWrite;\r
+\r
+public:\r
+  CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP, (CHAR8 **)&mWrite),\r
+                CIfrOpHeader (EFI_IFR_WRITE_OP, &mWrite->Header) {}\r
+\r
+};\r
+\r
+class CIfrGet : public CIfrObj, public CIfrOpHeader{\r
+private:\r
+  EFI_IFR_GET *mGet;\r
+\r
+public:\r
+  CIfrGet (\r
+  IN UINT32 LineNo  \r
+  ) : CIfrObj (EFI_IFR_GET_OP, (CHAR8 **)&mGet),\r
+      CIfrOpHeader (EFI_IFR_GET_OP, &mGet->Header) {\r
+    SetLineNo (LineNo);\r
+  }\r
+\r
+  VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) {\r
+    mGet->VarStoreId             = Info->mVarStoreId;\r
+    mGet->VarStoreInfo.VarName   = Info->mInfo.mVarName;\r
+    mGet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
+    mGet->VarStoreType           = Info->mVarType;\r
+  }\r
+};\r
+\r
+class CIfrSet : public CIfrObj, public CIfrOpHeader{\r
+private:\r
+  EFI_IFR_SET *mSet;\r
+\r
+public:\r
+  CIfrSet (\r
+  IN UINT32 LineNo\r
+  ) : CIfrObj (EFI_IFR_SET_OP, (CHAR8 **)&mSet),\r
+      CIfrOpHeader (EFI_IFR_SET_OP, &mSet->Header) {\r
+    SetLineNo (LineNo);\r
+  }\r
+\r
+  VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) {\r
+    mSet->VarStoreId             = Info->mVarStoreId;\r
+    mSet->VarStoreInfo.VarName   = Info->mInfo.mVarName;\r
+    mSet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset;\r
+    mSet->VarStoreType           = Info->mVarType;\r
+  }\r
+};\r
+\r
 class CIfrSubtitle : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
 private:\r
   EFI_IFR_SUBTITLE   *mSubtitle;\r
@@ -722,7 +1000,7 @@ private:
 public:\r
   CIfrSubtitle () : CIfrObj (EFI_IFR_SUBTITLE_OP, (CHAR8 **)&mSubtitle),\r
                   CIfrOpHeader (EFI_IFR_SUBTITLE_OP, &mSubtitle->Header),\r
-                                 CIfrStatementHeader (&mSubtitle->Statement) {\r
+  CIfrStatementHeader (&mSubtitle->Statement) {\r
     mSubtitle->Flags = 0;\r
   }\r
 \r
@@ -823,8 +1101,8 @@ private:
   EFI_IFR_REF4 *mRef4;\r
 \r
 public:\r
-  CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef4, sizeof(EFI_IFR_REF3)),\r
-               CIfrOpHeader (EFI_IFR_REF_OP, &mRef4->Header, sizeof (EFI_IFR_REF3)), \r
+  CIfrRef4 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef4, sizeof(EFI_IFR_REF4)),\r
+               CIfrOpHeader (EFI_IFR_REF_OP, &mRef4->Header, sizeof(EFI_IFR_REF4)), \r
                CIfrQuestionHeader (&mRef4->Question) {\r
     mRef4->FormId     = 0;\r
     mRef4->QuestionId = EFI_QUESTION_ID_INVALID;\r
@@ -849,6 +1127,17 @@ public:
   }\r
 };\r
 \r
+class CIfrRef5 : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
+private:\r
+  EFI_IFR_REF5 *mRef5;\r
+\r
+public:\r
+  CIfrRef5 () : CIfrObj (EFI_IFR_REF_OP, (CHAR8 **)&mRef5, sizeof (EFI_IFR_REF5)),\r
+              CIfrOpHeader (EFI_IFR_REF_OP, &mRef5->Header, sizeof (EFI_IFR_REF5)), \r
+              CIfrQuestionHeader (&mRef5->Question) {\r
+  }\r
+};\r
+\r
 class CIfrResetButton : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader {\r
 private:\r
   EFI_IFR_RESET_BUTTON *mResetButton;\r
@@ -856,7 +1145,7 @@ private:
 public:\r
   CIfrResetButton () : CIfrObj (EFI_IFR_RESET_BUTTON_OP, (CHAR8 **)&mResetButton),\r
                        CIfrOpHeader (EFI_IFR_RESET_BUTTON_OP, &mResetButton->Header), \r
-                                          CIfrStatementHeader (&mResetButton->Question.Header) {\r
+  CIfrStatementHeader (&mResetButton->Statement) {\r
     mResetButton->DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
   }\r
 \r
@@ -874,11 +1163,11 @@ public:
                      CIfrOpHeader (EFI_IFR_CHECKBOX_OP, &mCheckBox->Header), \r
                      CIfrQuestionHeader (&mCheckBox->Question) {\r
     mCheckBox->Flags = 0;\r
-    gCurrentQuestion = this;\r
+    gCurrentQuestion  = this;\r
   }\r
 \r
   ~CIfrCheckBox () {\r
-    gCurrentQuestion = NULL;\r
+    gCurrentQuestion  = NULL;\r
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, UINT8 LFlags) {\r
@@ -972,13 +1261,15 @@ public:
   CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric),\r
                    CIfrOpHeader (EFI_IFR_NUMERIC_OP, &mNumeric->Header),\r
                    CIfrQuestionHeader (&mNumeric->Question),\r
-                   CIfrMinMaxStepData (&mNumeric->data) {\r
+                   CIfrMinMaxStepData (&mNumeric->data, TRUE) {\r
     mNumeric->Flags  = EFI_IFR_NUMERIC_SIZE_1 | EFI_IFR_DISPLAY_UINT_DEC;\r
-    gCurrentQuestion = this;\r
+    gCurrentQuestion   = this;\r
+    gCurrentMinMaxData = this;\r
   }\r
 \r
   ~CIfrNumeric () {\r
-    gCurrentQuestion = NULL;\r
+    gCurrentQuestion   = NULL;\r
+    gCurrentMinMaxData = NULL;\r
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
@@ -1008,11 +1299,13 @@ public:
                  CIfrQuestionHeader (&mOneOf->Question),\r
                  CIfrMinMaxStepData (&mOneOf->data) {\r
     mOneOf->Flags    = 0;\r
-    gCurrentQuestion = this;\r
+    gCurrentQuestion   = this;\r
+    gCurrentMinMaxData = this;\r
   }\r
 \r
   ~CIfrOneOf () {\r
-    gCurrentQuestion = NULL;\r
+    gCurrentQuestion   = NULL;\r
+    gCurrentMinMaxData = NULL;\r
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
@@ -1257,6 +1550,21 @@ public:
   }\r
 };\r
 \r
+class CIfrRefreshId : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_REFRESH_ID *mRefreshId;\r
+\r
+public:\r
+  CIfrRefreshId () : CIfrObj (EFI_IFR_REFRESH_ID_OP, (CHAR8 **)&mRefreshId),\r
+      CIfrOpHeader (EFI_IFR_REFRESH_ID_OP, &mRefreshId->Header) {\r
+    memset (&mRefreshId->RefreshEventGroupId, 0, sizeof (EFI_GUID));\r
+  }\r
+\r
+  VOID SetRefreshEventGroutId (IN EFI_GUID *RefreshEventGroupId) {\r
+    memcpy (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));\r
+  }\r
+};\r
+\r
 class CIfrVarStoreDevice : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_VARSTORE_DEVICE *mVarStoreDevice;\r
@@ -1473,6 +1781,25 @@ public:
   }\r
 };\r
 \r
+class CIfrGuid : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_GUID *mGuid;\r
+\r
+public:\r
+  CIfrGuid (UINT8 Size) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mGuid, sizeof (EFI_IFR_GUID)+Size),\r
+                  CIfrOpHeader (EFI_IFR_GUID_OP, &mGuid->Header, sizeof (EFI_IFR_GUID)+Size) {\r
+    memset (&mGuid->Guid, 0, sizeof (EFI_GUID));\r
+  }\r
+\r
+  VOID SetGuid (IN EFI_GUID *Guid) {\r
+    memcpy (&mGuid->Guid, Guid, sizeof (EFI_GUID));\r
+  }\r
+\r
+  VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {\r
+    memcpy ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);\r
+  }\r
+};\r
+\r
 class CIfrDup : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_DUP *mDup;\r
@@ -1557,12 +1884,12 @@ public:
 \r
 class CIfrEqIdList : public CIfrObj, public CIfrOpHeader {\r
 private:\r
-  EFI_IFR_EQ_ID_LIST *mEqIdVList;\r
+  EFI_IFR_EQ_ID_VAL_LIST *mEqIdVList;\r
 \r
 public:\r
   CIfrEqIdList (\r
   IN UINT32 LineNo\r
-  ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP, (CHAR8 **)&mEqIdVList, sizeof (EFI_IFR_EQ_ID_LIST), TRUE),\r
+  ) : CIfrObj (EFI_IFR_EQ_ID_LIST_OP, (CHAR8 **)&mEqIdVList, sizeof (EFI_IFR_EQ_ID_VAL_LIST), TRUE),\r
                    CIfrOpHeader (EFI_IFR_EQ_ID_LIST_OP, &mEqIdVList->Header) {\r
     SetLineNo (LineNo);\r
     mEqIdVList->QuestionId   = EFI_QUESTION_ID_INVALID;\r
@@ -1573,7 +1900,7 @@ public:
   VOID UpdateIfrBuffer ( \r
   ) {\r
     _EMIT_PENDING_OBJ();\r
-    mEqIdVList = (EFI_IFR_EQ_ID_LIST *) GetObjBinAddr();\r
+    mEqIdVList = (EFI_IFR_EQ_ID_VAL_LIST *) GetObjBinAddr();\r
     UpdateHeader (&mEqIdVList->Header);\r
   }\r
 \r
@@ -1761,6 +2088,24 @@ public:
   }\r
 };\r
 \r
+class CIfrSecurity : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+  EFI_IFR_SECURITY *mSecurity;\r
+\r
+public:\r
+  CIfrSecurity (\r
+  IN UINT32 LineNo\r
+  ) : CIfrObj (EFI_IFR_SECURITY_OP, (CHAR8 **)&mSecurity),\r
+      CIfrOpHeader (EFI_IFR_SECURITY_OP, &mSecurity->Header) {\r
+    SetLineNo (LineNo);\r
+    memset (&mSecurity->Permissions, 0, sizeof (EFI_GUID));\r
+  }\r
+\r
+  VOID SetPermissions (IN EFI_GUID *Permissions) {\r
+    memcpy (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));\r
+  }\r
+};\r
+\r
 class CIfrUint8 : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_UINT8 *mUint8;\r
@@ -2171,6 +2516,19 @@ public:
   }\r
 };\r
 \r
+class CIfrMap : public CIfrObj, public CIfrOpHeader{\r
+private:\r
+  EFI_IFR_MAP *mMap;\r
+\r
+public:\r
+  CIfrMap (\r
+  IN UINT32 LineNo  \r
+  ) : CIfrObj (EFI_IFR_MAP_OP, (CHAR8 **)&mMap),\r
+      CIfrOpHeader (EFI_IFR_MAP_OP, &mMap->Header) {\r
+    SetLineNo (LineNo);\r
+  }\r
+};\r
+\r
 class CIfrMatch : public CIfrObj, public CIfrOpHeader {\r
 private:\r
   EFI_IFR_MATCH *mMatch;\r