]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
Sync EDKII BaseTools to BaseTools project r1903.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrUtilityLib.cpp
index f047b2c471905ed5494c6eefb389f4bb067b6c31..cae0479ad360a340e96421d63405ecd36230a4c7 100644 (file)
@@ -20,11 +20,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 VOID\r
 CVfrBinaryOutput::WriteLine (\r
-  IN FILE   *pFile,\r
-  IN UINT32 LineBytes,\r
-  IN CHAR8  *LineHeader,\r
-  IN CHAR8  *BlkBuf,\r
-  IN UINT32 BlkSize\r
+  IN FILE         *pFile,\r
+  IN UINT32       LineBytes,\r
+  IN CONST CHAR8  *LineHeader,\r
+  IN CHAR8        *BlkBuf,\r
+  IN UINT32       BlkSize\r
   )\r
 {\r
   UINT32    Index;\r
@@ -43,11 +43,11 @@ CVfrBinaryOutput::WriteLine (
 \r
 VOID\r
 CVfrBinaryOutput::WriteEnd (\r
-  IN FILE   *pFile,\r
-  IN UINT32 LineBytes,\r
-  IN CHAR8  *LineHeader,\r
-  IN CHAR8  *BlkBuf,\r
-  IN UINT32 BlkSize\r
+  IN FILE         *pFile,\r
+  IN UINT32       LineBytes,\r
+  IN CONST CHAR8  *LineHeader,\r
+  IN CHAR8        *BlkBuf,\r
+  IN UINT32       BlkSize\r
   )\r
 {\r
   UINT32    Index;\r
@@ -287,7 +287,7 @@ CVfrBufferConfig::Write (
   switch (Mode) {\r
   case 'a' : // add\r
     if (Select (Name, Id) != 0) {\r
-      if ((pItem = new SConfigItem (Name, Id, Type, Offset, Width, Value)) == NULL) {\r
+      if ((pItem = new SConfigItem (Name, Id, Type, Offset, (UINT16) Width, Value)) == NULL) {\r
         return 2;\r
       }\r
       if (mItemListHead == NULL) {\r
@@ -455,7 +455,7 @@ CVfrBufferConfig::~CVfrBufferConfig (
 CVfrBufferConfig gCVfrBufferConfig;\r
 \r
 static struct {\r
-  CHAR8  *mTypeName;\r
+  CONST CHAR8  *mTypeName;\r
   UINT8  mType;\r
   UINT32 mSize;\r
   UINT32 mAlign;\r
@@ -744,20 +744,20 @@ CVfrVarDataTypeDB::InternalTypesListInit (
         SVfrDataField *pDayField   = new SVfrDataField;\r
 \r
         strcpy (pYearField->mFieldName, "Year");\r
-        GetDataType ("UINT8", &pYearField->mFieldType);\r
+        GetDataType ((CHAR8 *)"UINT16", &pYearField->mFieldType);\r
         pYearField->mOffset      = 0;\r
         pYearField->mNext        = pMonthField;\r
         pYearField->mArrayNum    = 0;\r
 \r
         strcpy (pMonthField->mFieldName, "Month");\r
-        GetDataType ("UINT8", &pMonthField->mFieldType);\r
-        pMonthField->mOffset     = 1;\r
+        GetDataType ((CHAR8 *)"UINT8", &pMonthField->mFieldType);\r
+        pMonthField->mOffset     = 2;\r
         pMonthField->mNext       = pDayField;\r
         pMonthField->mArrayNum   = 0;\r
 \r
         strcpy (pDayField->mFieldName, "Day");\r
-        GetDataType ("UINT8", &pDayField->mFieldType);\r
-        pDayField->mOffset       = 2;\r
+        GetDataType ((CHAR8 *)"UINT8", &pDayField->mFieldType);\r
+        pDayField->mOffset       = 3;\r
         pDayField->mNext         = NULL;\r
         pDayField->mArrayNum     = 0;\r
 \r
@@ -768,19 +768,19 @@ CVfrVarDataTypeDB::InternalTypesListInit (
         SVfrDataField *pSecondsField = new SVfrDataField;\r
 \r
         strcpy (pHoursField->mFieldName, "Hours");\r
-        GetDataType ("UINT8", &pHoursField->mFieldType);\r
+        GetDataType ((CHAR8 *)"UINT8", &pHoursField->mFieldType);\r
         pHoursField->mOffset     = 0;\r
         pHoursField->mNext       = pMinutesField;\r
         pHoursField->mArrayNum   = 0;\r
 \r
         strcpy (pMinutesField->mFieldName, "Minutes");\r
-        GetDataType ("UINT8", &pMinutesField->mFieldType);\r
+        GetDataType ((CHAR8 *)"UINT8", &pMinutesField->mFieldType);\r
         pMinutesField->mOffset   = 1;\r
         pMinutesField->mNext     = pSecondsField;\r
         pMinutesField->mArrayNum = 0;\r
 \r
         strcpy (pSecondsField->mFieldName, "Seconds");\r
-        GetDataType ("UINT8", &pSecondsField->mFieldType);\r
+        GetDataType ((CHAR8 *)"UINT8", &pSecondsField->mFieldType);\r
         pSecondsField->mOffset   = 2;\r
         pSecondsField->mNext     = NULL;\r
         pSecondsField->mArrayNum = 0;\r
@@ -853,7 +853,7 @@ CVfrVarDataTypeDB::Pack (
 \r
   if (Action & VFR_PACK_SHOW) {\r
     sprintf (Msg, "value of pragma pack(show) == %d", mPackAlign);\r
-    gCVfrErrorHandle.PrintMsg (LineNum, "", "Warning", Msg);\r
+    gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Warning", Msg);\r
   }\r
 \r
   if (Action & VFR_PACK_PUSH) {\r
@@ -870,7 +870,7 @@ CVfrVarDataTypeDB::Pack (
     SVfrPackStackNode *pNode = NULL;\r
 \r
     if (mPackStack == NULL) {\r
-      gCVfrErrorHandle.PrintMsg (LineNum, "", "Error", "#pragma pack(pop...) : more pops than pushes");\r
+      gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Error", "#pragma pack(pop...) : more pops than pushes");\r
     }\r
 \r
     for (pNode = mPackStack; pNode != NULL; pNode = pNode->mNext) {\r
@@ -884,7 +884,7 @@ CVfrVarDataTypeDB::Pack (
   if (Action & VFR_PACK_ASSIGN) {\r
     PackAlign = (Number > 1) ? Number + Number % 2 : Number;\r
     if ((PackAlign == 0) || (PackAlign > 16)) {\r
-      gCVfrErrorHandle.PrintMsg (LineNum, "", "Error", "expected pragma parameter to be '1', '2', '4', '8', or '16'");\r
+      gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Error", "expected pragma parameter to be '1', '2', '4', '8', or '16'");\r
     } else {\r
       mPackAlign = PackAlign;\r
     }\r
@@ -1127,7 +1127,7 @@ CVfrVarDataTypeDB::GetDataFieldInfo (
     CHECK_ERROR_RETURN(GetTypeField (FName, pType, pField), VFR_RETURN_SUCCESS);\r
     pType  = pField->mFieldType;\r
     CHECK_ERROR_RETURN(GetFieldOffset (pField, ArrayIdx, Tmp), VFR_RETURN_SUCCESS);\r
-    Offset += Tmp;\r
+    Offset = (UINT16) (Offset + Tmp);\r
     Type   = GetFieldWidth (pField);\r
     Size   = GetFieldSize (pField, ArrayIdx);\r
   }\r
@@ -1386,6 +1386,7 @@ CVfrDataStorage::GetFreeVarStoreId (
   //\r
   // Assign the different ID range for the different type VarStore to support Framework Vfr\r
   //\r
+  Index = 0;\r
   if ((!VfrCompatibleMode) || (VarType == EFI_VFR_VARSTORE_BUFFER)) {\r
     Index = 0;\r
   } else if (VarType == EFI_VFR_VARSTORE_EFI) {\r
@@ -1838,13 +1839,11 @@ CVfrDataStorage::BufferVarStoreRequestElementAdd (
   IN EFI_VARSTORE_INFO &Info\r
   )\r
 {\r
-  CHAR8                 NewReqElt[128] = {'\0',};\r
-  CHAR8                 *OldReqElt = NULL;\r
   SVfrVarStorageNode    *pNode = NULL;\r
   EFI_IFR_TYPE_VALUE    Value = gZeroEfiIfrTypeValue;\r
 \r
   for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == NULL) {\r
+    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
       break;\r
     }\r
   }\r
@@ -2024,85 +2023,6 @@ CVfrDefaultStore::GetDefaultId (
   return VFR_RETURN_UNDEFINED;\r
 }\r
 \r
-STATIC\r
-EFI_VFR_RETURN_CODE\r
-AltCfgItemPrintToBuffer (\r
-  IN CHAR8              *NewAltCfg, \r
-  IN EFI_VARSTORE_INFO  Info, \r
-  IN UINT8              Type,\r
-  IN EFI_IFR_TYPE_VALUE Value\r
-  )\r
-{\r
-  UINT32 Index;\r
-  UINT8  *BufChar = NULL;\r
-  UINT32 Count    = 0;\r
-\r
-  if (NewAltCfg != NULL) {\r
-    Count = sprintf (\r
-              NewAltCfg,\r
-              "&OFFSET=%x&WIDTH=%x&VALUE=",\r
-              Info.mInfo.mVarOffset,\r
-              Info.mVarTotalSize\r
-              );\r
-    NewAltCfg += Count;\r
-\r
-    switch (Type) {\r
-    case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u8);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u16);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u32);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u64);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_BOOLEAN :\r
-      Count = sprintf (NewAltCfg, "%x", Value.b);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_TIME :\r
-#if 1\r
-      Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.time)));\r
-      NewAltCfg += Count;\r
-#else\r
-      BufChar = (UINT8 *)&Value.time;\r
-      for (Index = 0; Index < sizeof(EFI_HII_TIME); Index++) {\r
-        Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]);\r
-        NewAltCfg += Count;\r
-      }\r
-#endif\r
-      break;\r
-    case EFI_IFR_TYPE_DATE :\r
-#if 1\r
-      Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.date)));\r
-      NewAltCfg += Count;\r
-#else\r
-      BufChar = (UINT8 *)&Value.date;\r
-      for (Index = 0; Index < sizeof(EFI_HII_DATE); Index++) {\r
-        Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]);\r
-        NewAltCfg += Count;\r
-      }\r
-#endif\r
-      break;\r
-    case EFI_IFR_TYPE_STRING :\r
-      Count = sprintf (NewAltCfg, "%x", Value.string);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_OTHER :\r
-      return VFR_RETURN_UNSUPPORTED;\r
-       }\r
-  }\r
-\r
-  return VFR_RETURN_FATAL_ERROR;\r
-}\r
-\r
 EFI_VFR_RETURN_CODE\r
 CVfrDefaultStore::BufferVarStoreAltConfigAdd (\r
   IN EFI_VARSTORE_ID    DefaultId,\r
@@ -2340,6 +2260,7 @@ SVfrQuestionNode::SVfrQuestionNode (
   mQuestionId = EFI_QUESTION_ID_INVALID;\r
   mBitMask    = BitMask;\r
   mNext       = NULL;\r
+  mQtype      = QUESTION_NORMAL;\r
 \r
   if (Name == NULL) {\r
     mName = new CHAR8[strlen ("$DEFAULT") + 1];\r
@@ -2509,6 +2430,9 @@ CVfrQuestionDB::RegisterOldDateQuestion (
   pNode[0]->mQuestionId = QuestionId;\r
   pNode[1]->mQuestionId = QuestionId;\r
   pNode[2]->mQuestionId = QuestionId;\r
+  pNode[0]->mQtype      = QUESTION_DATE;\r
+  pNode[1]->mQtype      = QUESTION_DATE;\r
+  pNode[2]->mQtype      = QUESTION_DATE;\r
   pNode[0]->mNext       = pNode[1];\r
   pNode[1]->mNext       = pNode[2];\r
   pNode[2]->mNext       = mQuestionList;\r
@@ -2585,6 +2509,9 @@ CVfrQuestionDB::RegisterNewDateQuestion (
   pNode[0]->mQuestionId = QuestionId;\r
   pNode[1]->mQuestionId = QuestionId;\r
   pNode[2]->mQuestionId = QuestionId;\r
+  pNode[0]->mQtype      = QUESTION_DATE;\r
+  pNode[1]->mQtype      = QUESTION_DATE;\r
+  pNode[2]->mQtype      = QUESTION_DATE;\r
   pNode[0]->mNext       = pNode[1];\r
   pNode[1]->mNext       = pNode[2];\r
   pNode[2]->mNext       = mQuestionList;\r
@@ -2651,6 +2578,9 @@ CVfrQuestionDB::RegisterOldTimeQuestion (
   pNode[0]->mQuestionId = QuestionId;\r
   pNode[1]->mQuestionId = QuestionId;\r
   pNode[2]->mQuestionId = QuestionId;\r
+  pNode[0]->mQtype      = QUESTION_TIME;\r
+  pNode[1]->mQtype      = QUESTION_TIME;\r
+  pNode[2]->mQtype      = QUESTION_TIME;\r
   pNode[0]->mNext       = pNode[1];\r
   pNode[1]->mNext       = pNode[2];\r
   pNode[2]->mNext       = mQuestionList;\r
@@ -2727,6 +2657,9 @@ CVfrQuestionDB::RegisterNewTimeQuestion (
   pNode[0]->mQuestionId = QuestionId;\r
   pNode[1]->mQuestionId = QuestionId;\r
   pNode[2]->mQuestionId = QuestionId;\r
+  pNode[0]->mQtype      = QUESTION_TIME;\r
+  pNode[1]->mQtype      = QUESTION_TIME;\r
+  pNode[2]->mQtype      = QUESTION_TIME;\r
   pNode[0]->mNext       = pNode[1];\r
   pNode[1]->mNext       = pNode[2];\r
   pNode[2]->mNext       = mQuestionList;\r
@@ -2800,13 +2733,17 @@ CVfrQuestionDB::GetQuestionId (
   IN  CHAR8             *Name,\r
   IN  CHAR8             *VarIdStr,\r
   OUT EFI_QUESTION_ID   &QuestionId,\r
-  OUT UINT32            &BitMask\r
+  OUT UINT32            &BitMask,\r
+  OUT EFI_QUESION_TYPE  *QType\r
   )\r
 {\r
   SVfrQuestionNode *pNode;\r
 \r
   QuestionId = EFI_QUESTION_ID_INVALID;\r
   BitMask    = 0x00000000;\r
+  if (QType != NULL) {\r
+    *QType = QUESTION_NORMAL;\r
+  }\r
 \r
   if ((Name == NULL) && (VarIdStr == NULL)) {\r
     return ;\r
@@ -2827,6 +2764,9 @@ CVfrQuestionDB::GetQuestionId (
 \r
     QuestionId = pNode->mQuestionId;\r
     BitMask    = pNode->mBitMask;\r
+    if (QType != NULL) {\r
+      *QType     = pNode->mQtype;\r
+    }\r
     break;\r
   }\r
 \r
@@ -2877,3 +2817,4 @@ BOOLEAN  VfrCompatibleMode = FALSE;
 \r
 CVfrVarDataTypeDB gCVfrVarDataTypeDB;\r
 \r
+\r