## AnalyzeDscPcd\r
#\r
# Analyze DSC PCD value, since there is no data type info in DSC\r
-# This fuction is used to match functions (AnalyzePcdData) used for retrieving PCD value from database\r
+# This function is used to match functions (AnalyzePcdData) used for retrieving PCD value from database\r
# 1. Feature flag: TokenSpace.PcdCName|PcdValue\r
-# 2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|MaxSize]\r
+# 2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]\r
# 3. Dynamic default:\r
# TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]\r
# TokenSpace.PcdCName|PcdValue\r
# TokenSpace.PcdCName|VpdOffset[|VpdValue]\r
# TokenSpace.PcdCName|VpdOffset[|MaxSize[|VpdValue]]\r
# 5. Dynamic HII:\r
-# TokenSpace.PcdCName|HiiString|VaiableGuid|VariableOffset[|HiiValue]\r
+# TokenSpace.PcdCName|HiiString|VariableGuid|VariableOffset[|HiiValue]\r
# PCD value needs to be located in such kind of string, and the PCD value might be an expression in which\r
# there might have "|" operator, also in string value.\r
#\r
FieldList = AnalyzePcdExpression(Setting)\r
\r
IsValid = True\r
- if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_FEATURE_FLAG):\r
+ if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
Value = FieldList[0]\r
Size = ''\r
- if len(FieldList) > 1:\r
- if FieldList[1].upper().startswith("0X") or FieldList[1].isdigit():\r
- Size = FieldList[1]\r
- else:\r
- DataType = FieldList[1]\r
-\r
- if len(FieldList) > 2:\r
- Size = FieldList[2]\r
- if DataType == "":\r
- IsValid = (len(FieldList) <= 1)\r
- else:\r
- IsValid = (len(FieldList) <= 3)\r
-# Value, Size = ParseFieldValue(Value)\r
- if Size:\r
- try:\r
- int(Size, 16) if Size.upper().startswith("0X") else int(Size)\r
- except:\r
+ if len(FieldList) > 1 and FieldList[1]:\r
+ DataType = FieldList[1]\r
+ if FieldList[1] != TAB_VOID:\r
IsValid = False\r
- Size = -1\r
- return [str(Value), '', str(Size)], IsValid, 0\r
- elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
- Value = FieldList[0]\r
- Size = Type = ''\r
- if len(FieldList) > 1:\r
- Type = FieldList[1]\r
- else:\r
- Type = DataType\r
if len(FieldList) > 2:\r
Size = FieldList[2]\r
- if DataType == "":\r
- IsValid = (len(FieldList) <= 1)\r
- else:\r
- IsValid = (len(FieldList) <= 3)\r
+ if IsValid:\r
+ if DataType == "":\r
+ IsValid = (len(FieldList) <= 1)\r
+ else:\r
+ IsValid = (len(FieldList) <= 3)\r
\r
if Size:\r
try:\r
except:\r
IsValid = False\r
Size = -1\r
- return [Value, Type, str(Size)], IsValid, 0\r
+ return [str(Value), DataType, str(Size)], IsValid, 0\r
+ elif PcdType == MODEL_PCD_FEATURE_FLAG:\r
+ Value = FieldList[0]\r
+ Size = ''\r
+ IsValid = (len(FieldList) <= 1)\r
+ return [Value, DataType, str(Size)], IsValid, 0\r
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
VpdOffset = FieldList[0]\r
Value = Size = ''\r
if not Valid:\r
EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
- if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
+ if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
\r
ValList, Valid, Index = AnalyzeDscPcd(self._ValueList[2], self._ItemType)\r
if not Valid:\r
+ if self._ItemType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
+ if ValList[1] != TAB_VOID and ValList[2]:\r
+ EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect. Only VOID* type PCD need the maxsize info.", File=self._FileWithError,\r
+ Line=self._LineIndex + 1, ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))\r
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self._FileWithError, Line=self._LineIndex + 1,\r
ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))\r
PcdValue = ValList[Index]\r