]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrFormPkg.h
Sync EDKII BaseTools to BaseTools project r1903.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.h
index 0b84896cc9d2ffda7c7236a89292486c9da3d1bb..38422e1332f85636b628fc491908834f16d229fe 100644 (file)
@@ -2,7 +2,7 @@
   \r
   The definition of CFormPkg's member function\r
 \r
-Copyright (c) 2004 - 2009, Intel Corporation                                                         \r
+Copyright (c) 2004 - 2010, Intel Corporation                                                         \r
 All rights reserved. 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
@@ -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
@@ -108,8 +108,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 +131,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
@@ -195,11 +195,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 +227,7 @@ 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
@@ -248,7 +248,7 @@ 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
@@ -557,6 +557,7 @@ static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;
 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
@@ -565,6 +566,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
@@ -580,7 +582,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
@@ -620,10 +622,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
@@ -639,6 +639,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
@@ -654,11 +659,11 @@ public:
       //\r
       return VFR_RETURN_INVALID_PARAMETER;\r
     }\r
-    if (CIfrForm::ChekFormIdFree (FormId) == FALSE) {\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
@@ -667,6 +672,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
@@ -696,7 +739,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
@@ -832,6 +875,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
@@ -2310,6 +2413,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