self.VtfList = []\r
self.RuleDict = {}\r
self.OptRomDict = {}\r
+ self.FmpPayloadDict = {}\r
\r
## The syntax parser for FDF\r
#\r
while self.__GetFv():\r
pass\r
\r
+ while self.__GetFmp():\r
+ pass\r
+\r
while self.__GetCapsule():\r
pass\r
\r
\r
S = self.__Token.upper()\r
if S.startswith("[") and not S.startswith("[FD."):\r
- if not S.startswith("[FV.") and not S.startswith("[CAPSULE.") \\r
+ if not S.startswith("[FV.") and not S.startswith('[FMPPAYLOAD.') and not S.startswith("[CAPSULE.") \\r
and not S.startswith("[VTF.") and not S.startswith("[RULE.") and not S.startswith("[OPTIONROM."):\r
raise Warning("Unknown section", self.FileName, self.CurrentLineNumber)\r
self.__UndoToken()\r
\r
S = self.__Token.upper()\r
if S.startswith("[") and not S.startswith("[FV."):\r
- if not S.startswith("[CAPSULE.") \\r
+ if not S.startswith('[FMPPAYLOAD.') and not S.startswith("[CAPSULE.") \\r
and not S.startswith("[VTF.") and not S.startswith("[RULE.") and not S.startswith("[OPTIONROM."):\r
raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)\r
self.__UndoToken()\r
else:\r
return True\r
\r
+ def __GetFmp(self):\r
+ if not self.__GetNextToken():\r
+ return False\r
+ S = self.__Token.upper()\r
+ if not S.startswith("[FMPPAYLOAD."):\r
+ if not S.startswith("[CAPSULE.") and not S.startswith("[VTF.") and not S.startswith("[RULE.") and not S.startswith("[OPTIONROM."):\r
+ raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [FmpPayload.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)\r
+ self.__UndoToken()\r
+ return False\r
+\r
+ self.__UndoToken()\r
+ self.__SkipToToken("[FMPPAYLOAD.", True)\r
+ FmpUiName = self.__GetUiName().upper()\r
+ if FmpUiName in self.Profile.FmpPayloadDict:\r
+ raise Warning("Duplicated FMP UI name found: %s" % FmpUiName, self.FileName, self.CurrentLineNumber)\r
+\r
+ FmpData = CapsuleData.CapsulePayload()\r
+ FmpData.UiName = FmpUiName\r
+\r
+ if not self.__IsToken( "]"):\r
+ raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)\r
+\r
+ if not self.__GetNextToken():\r
+ raise Warning("The FMP payload section is empty!", self.FileName, self.CurrentLineNumber)\r
+ FmpKeyList = ['IMAGE_HEADER_INIT_VERSION', 'IMAGE_TYPE_ID', 'IMAGE_INDEX', 'HARDWARE_INSTANCE']\r
+ while self.__Token in FmpKeyList:\r
+ Name = self.__Token\r
+ FmpKeyList.remove(Name)\r
+ if not self.__IsToken("="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ if Name == 'IMAGE_TYPE_ID':\r
+ if not self.__GetNextGuid():\r
+ raise Warning("expected GUID value for IMAGE_TYPE_ID", self.FileName, self.CurrentLineNumber)\r
+ FmpData.ImageTypeId = self.__Token\r
+ else:\r
+ if not self.__GetNextToken():\r
+ raise Warning("expected value of %s" % Name, self.FileName, self.CurrentLineNumber)\r
+ Value = self.__Token\r
+ if Name == 'IMAGE_HEADER_INIT_VERSION':\r
+ FmpData.Version = Value\r
+ elif Name == 'IMAGE_INDEX':\r
+ FmpData.ImageIndex = Value\r
+ elif Name == 'HARDWARE_INSTANCE':\r
+ FmpData.HardwareInstance = Value\r
+ if not self.__GetNextToken():\r
+ break\r
+ else:\r
+ self.__UndoToken()\r
+\r
+ if FmpKeyList:\r
+ raise Warning("Missing keywords %s in FMP payload section" % ', '.join(FmpKeyList), self.FileName, self.CurrentLineNumber)\r
+ ImageFile = self.__ParseRawFileStatement()\r
+ if not ImageFile:\r
+ raise Warning("Missing image file in FMP payload section", self.FileName, self.CurrentLineNumber)\r
+ FmpData.ImageFile = ImageFile\r
+ VendorCodeFile = self.__ParseRawFileStatement()\r
+ if VendorCodeFile:\r
+ FmpData.VendorCodeFile = VendorCodeFile\r
+ self.Profile.FmpPayloadDict[FmpUiName] = FmpData\r
+ return True\r
+\r
## __GetCapsule() method\r
#\r
# Get capsule section contents and store its data into capsule list of self.Profile\r
def __GetCapsuleTokens(self, Obj):\r
if not self.__GetNextToken():\r
return False\r
- while self.__Token in ("CAPSULE_GUID", "CAPSULE_HEADER_SIZE", "CAPSULE_FLAGS", "OEM_CAPSULE_FLAGS"):\r
+ while self.__Token in ("CAPSULE_GUID", "CAPSULE_HEADER_SIZE", "CAPSULE_FLAGS", "OEM_CAPSULE_FLAGS", "CAPSULE_HEADER_INIT_VERSION"):\r
Name = self.__Token.strip()\r
if not self.__IsToken("="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
IsFd = self.__GetFdStatement(Obj)\r
IsAnyFile = self.__GetAnyFileStatement(Obj)\r
IsAfile = self.__GetAfileStatement(Obj)\r
- if not (IsInf or IsFile or IsFv or IsFd or IsAnyFile or IsAfile):\r
+ IsFmp = self.__GetFmpStatement(Obj)\r
+ if not (IsInf or IsFile or IsFv or IsFd or IsAnyFile or IsAfile or IsFmp):\r
break\r
\r
## __GetFvStatement() method\r
CapsuleObj.CapsuleDataList.append(CapsuleFd)\r
return True\r
\r
- ## __GetAnyFileStatement() method\r
- #\r
- # Get AnyFile for capsule\r
- #\r
- # @param self The object pointer\r
- # @param CapsuleObj for whom AnyFile is got\r
- # @retval True Successfully find a Anyfile statement\r
- # @retval False Not able to find a AnyFile statement\r
- #\r
- def __GetAnyFileStatement(self, CapsuleObj):\r
+ def __GetFmpStatement(self, CapsuleObj):\r
+ if not self.__IsKeyword("FMP"):\r
+ return False\r
\r
- if not self.__IsKeyword("FILE"):\r
+ if not self.__IsKeyword("PAYLOAD"):\r
+ self.__UndoToken()\r
return False\r
\r
+ if not self.__IsToken("="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+\r
+ if not self.__GetNextToken():\r
+ raise Warning("expected payload name after FMP PAYLOAD =", self.FileName, self.CurrentLineNumber)\r
+ Payload = self.__Token.upper()\r
+ if Payload not in self.Profile.FmpPayloadDict:\r
+ raise Warning("This FMP Payload does not exist: %s" % self.__Token, self.FileName, self.CurrentLineNumber)\r
+ CapsuleObj.FmpPayloadList.append(self.Profile.FmpPayloadDict[Payload])\r
+ return True\r
+\r
+ def __ParseRawFileStatement(self):\r
+ if not self.__IsKeyword("FILE"):\r
+ return None\r
+\r
if not self.__IsKeyword("DATA"):\r
self.__UndoToken()\r
- return False\r
+ return None\r
\r
if not self.__IsToken("="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
AnyFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(AnyFileName)\r
if not os.path.exists(AnyFileName):\r
raise Warning("File %s not exists"%AnyFileName, self.FileName, self.CurrentLineNumber)\r
+ return AnyFileName\r
+\r
+ ## __GetAnyFileStatement() method\r
+ #\r
+ # Get AnyFile for capsule\r
+ #\r
+ # @param self The object pointer\r
+ # @param CapsuleObj for whom AnyFile is got\r
+ # @retval True Successfully find a Anyfile statement\r
+ # @retval False Not able to find a AnyFile statement\r
+ #\r
+ def __GetAnyFileStatement(self, CapsuleObj):\r
+ AnyFileName = self.__ParseRawFileStatement()\r
+ if not AnyFileName:\r
+ return False\r
\r
CapsuleAnyFile = CapsuleData.CapsuleAnyFile()\r
CapsuleAnyFile.FileName = AnyFileName\r