]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrFormPkg.h
Sync tool code to BuildTools project r1783.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.h
index 324078a1481729975a4bea83a49fef31dc7eb32f..0b84896cc9d2ffda7c7236a89292486c9da3d1bb 100644 (file)
@@ -398,49 +398,159 @@ public:
   }\r
 };\r
 \r
-static CIfrQuestionHeader *gCurrentQuestion  = NULL;\r
-static CIfrObj            *gCurrentIfrOpcode = 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
@@ -979,15 +1089,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
-    gCurrentIfrOpcode = this;\r
+    gCurrentQuestion   = this;\r
+    gCurrentMinMaxData = this;\r
   }\r
 \r
   ~CIfrNumeric () {\r
-    gCurrentQuestion  = NULL;\r
-    gCurrentIfrOpcode = NULL;\r
+    gCurrentQuestion   = NULL;\r
+    gCurrentMinMaxData = NULL;\r
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
@@ -1017,13 +1127,13 @@ public:
                  CIfrQuestionHeader (&mOneOf->Question),\r
                  CIfrMinMaxStepData (&mOneOf->data) {\r
     mOneOf->Flags    = 0;\r
-    gCurrentQuestion  = this;\r
-    gCurrentIfrOpcode = this;\r
+    gCurrentQuestion   = this;\r
+    gCurrentMinMaxData = this;\r
   }\r
 \r
   ~CIfrOneOf () {\r
-    gCurrentQuestion  = NULL;\r
-    gCurrentIfrOpcode = NULL;\r
+    gCurrentQuestion   = NULL;\r
+    gCurrentMinMaxData = NULL;\r
   }\r
 \r
   EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
@@ -1772,6 +1882,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