]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrFormPkg.h
Maintainers.txt: Remove EdkCompatibilityPkg information
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrFormPkg.h
index 9091204f991a7565e09f339527c770a71d69e06c..c8e7d987563edc96e7b41ef8275a25708d78ab95 100644 (file)
@@ -1,7 +1,7 @@
 /*++\r
 \r
-Copyright (c) 2004 - 2010, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2004 - 2010, 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
@@ -11,7 +11,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 Module Name:\r
 \r
-VfrFormPkg.h\r
+  VfrFormPkg.h\r
 \r
 Abstract:\r
 \r
@@ -25,6 +25,8 @@ Abstract:
 #include "VfrError.h"\r
 #include "VfrUtilityLib.h"\r
 \r
+#define NO_QST_REFED "no question refered"\r
+\r
 /*\r
  * The functions below are used for flags setting\r
  */\r
@@ -75,9 +77,10 @@ struct SPendingAssign {
   UINT32                  mLen;\r
   ASSIGN_FLAG             mFlag;\r
   UINT32                  mLineNo;\r
+  INT8                    *mMsg;\r
   struct SPendingAssign   *mNext;\r
 \r
-  SPendingAssign (IN INT8 *, IN VOID *, IN UINT32, IN UINT32);\r
+  SPendingAssign (IN INT8 *, IN VOID *, IN UINT32, IN UINT32, IN INT8 *);\r
   ~SPendingAssign ();\r
 \r
   VOID   SetAddrAndLen (IN VOID *, IN UINT32);\r
@@ -126,7 +129,7 @@ public:
   EFI_VFR_RETURN_CODE GenCFile (IN INT8 *, IN FILE *);\r
 \r
 public:\r
-  EFI_VFR_RETURN_CODE AssignPending (IN INT8 *, IN VOID *, IN UINT32, IN UINT32);\r
+  EFI_VFR_RETURN_CODE AssignPending (IN INT8 *, IN VOID *, IN UINT32, IN UINT32, IN INT8 *Msg = NULL);\r
   VOID                DoPendingAssign (IN INT8 *, IN VOID *, IN UINT32);\r
   bool                HavePendingUnassigned (VOID);\r
   VOID                PendingAssignPrintAll (VOID);\r
@@ -368,48 +371,159 @@ 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
@@ -418,10 +532,11 @@ private:
   EFI_IFR_FORM_SET *mFormSet;\r
 \r
 public:\r
-  CIfrFormSet () : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet),\r
-                   CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header) {\r
+  CIfrFormSet (UINT8 Size) : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet, Size),\r
+                   CIfrOpHeader (EFI_IFR_FORM_SET_OP, &mFormSet->Header, Size) {\r
     mFormSet->Help         = EFI_STRING_ID_INVALID;\r
     mFormSet->FormSetTitle = EFI_STRING_ID_INVALID;\r
+    mFormSet->Flags        = 0;\r
     memset (&mFormSet->Guid, 0, sizeof (EFI_GUID));\r
   }\r
 \r
@@ -436,6 +551,17 @@ public:
   VOID SetHelp (IN EFI_STRING_ID Help) {\r
     mFormSet->Help = Help;\r
   }\r
+\r
+  VOID SetClassGuid (IN EFI_GUID *Guid) {\r
+    if (mFormSet->Flags > 0 && ExpendObjBin(sizeof(EFI_GUID))) {\r
+      IncLength (sizeof (EFI_GUID));\r
+    }\r
+    memcpy (&(mFormSet->ClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
+  }\r
+\r
+  UINT8 GetFlags() {\r
+    return mFormSet->Flags;\r
+  }\r
 };\r
 \r
 class CIfrEnd : public CIfrObj, public CIfrOpHeader {\r
@@ -817,7 +943,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
@@ -834,7 +960,7 @@ public:
   CIfrCheckBox () : CIfrObj (EFI_IFR_CHECKBOX_OP, (CHAR8 **)&mCheckBox),\r
                      CIfrOpHeader (EFI_IFR_CHECKBOX_OP, &mCheckBox->Header), \r
                      CIfrQuestionHeader (&mCheckBox->Question) {\r
-    mCheckBox->Flags = EFI_IFR_CHECKBOX_DEFAULT;\r
+    mCheckBox->Flags = 0;\r
     gCurrentQuestion = this;\r
   }\r
 \r
@@ -860,6 +986,10 @@ public:
 \r
     return _FLAGS_ZERO (LFlags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;\r
   }\r
+\r
+  UINT8 GetFlags (VOID) {\r
+    return mCheckBox->Flags;\r
+  }\r
 };\r
 \r
 class CIfrAction : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {\r
@@ -929,13 +1059,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
@@ -965,11 +1097,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
@@ -1428,7 +1562,7 @@ public:
     if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
       mEqIdId->QuestionId1 = QuestionId;\r
     } else {\r
-      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId1), sizeof (EFI_QUESTION_ID), LineNo);\r
+      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId1), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
     }\r
   }\r
 \r
@@ -1440,7 +1574,7 @@ public:
     if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
       mEqIdId->QuestionId2 = QuestionId;\r
     } else {\r
-      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId2), sizeof (EFI_QUESTION_ID), LineNo);\r
+      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdId->QuestionId2), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
     }\r
   }\r
 };\r
@@ -1466,7 +1600,7 @@ public:
     if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
       mEqIdVal->QuestionId = QuestionId;\r
     } else {\r
-      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVal->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);\r
+      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVal->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
     }\r
   }\r
 \r
@@ -1498,7 +1632,7 @@ public:
     if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
       mEqIdVList->QuestionId = QuestionId;\r
     } else {\r
-      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVList->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);\r
+      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mEqIdVList->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
     }\r
   }\r
 \r
@@ -1540,7 +1674,7 @@ public:
     if (QuestionId != EFI_QUESTION_ID_INVALID) {\r
       mQuestionRef1->QuestionId = QuestionId;\r
     } else {\r
-      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mQuestionRef1->QuestionId), sizeof (EFI_QUESTION_ID), LineNo);\r
+      gCFormPkg.AssignPending (VarIdStr, (VOID *)(&mQuestionRef1->QuestionId), sizeof (EFI_QUESTION_ID), LineNo, NO_QST_REFED);\r
     }\r
   }\r
 };\r