## @file\r
# parse FDF file\r
#\r
-# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
# Copyright (c) 2015, Hewlett Packard Enterprise Development, L.P.<BR>\r
#\r
# This program and the accompanying materials\r
if not self.__GetNextWord():\r
return True\r
\r
- if not self.__Token in ("SET", "FV", "FILE", "DATA", "CAPSULE"):\r
+ if not self.__Token in ("SET", "FV", "FILE", "DATA", "CAPSULE", "INF"):\r
#\r
# If next token is a word which is not a valid FV type, it might be part of [PcdOffset[|PcdSize]]\r
# Or it might be next region's offset described by an expression which starts with a PCD.\r
\r
elif self.__Token == "FILE":\r
self.__UndoToken()\r
- self.__GetRegionFileType( RegionObj)\r
+ self.__GetRegionFileType(RegionObj)\r
+\r
+ elif self.__Token == "INF":\r
+ self.__UndoToken()\r
+ RegionObj.RegionType = "INF"\r
+ while self.__IsKeyword("INF"):\r
+ self.__UndoToken()\r
+ ffsInf = self.__ParseInfStatement()\r
+ if not ffsInf:\r
+ break\r
+ RegionObj.RegionDataList.append(ffsInf)\r
\r
elif self.__Token == "DATA":\r
self.__UndoToken()\r
- self.__GetRegionDataType( RegionObj)\r
+ self.__GetRegionDataType(RegionObj)\r
else:\r
self.__UndoToken()\r
if self.__GetRegionLayout(Fd):\r
return True\r
raise Warning("A valid region type was not found. "\r
- "Valid types are [SET, FV, CAPSULE, FILE, DATA]. This error occurred",\r
+ "Valid types are [SET, FV, CAPSULE, FILE, DATA, INF]. This error occurred",\r
self.FileName, self.CurrentLineNumber)\r
\r
return True\r
FvObj.AprioriSectionList.append(AprSectionObj)\r
return True\r
\r
- ## __GetInfStatement() method\r
- #\r
- # Get INF statements\r
- #\r
- # @param self The object pointer\r
- # @param Obj for whom inf statement is got\r
- # @param MacroDict dictionary used to replace macro\r
- # @retval True Successfully find inf statement\r
- # @retval False Not able to find inf statement\r
- #\r
- def __GetInfStatement(self, Obj, ForCapsule = False, MacroDict = {}):\r
-\r
- if not self.__IsKeyword( "INF"):\r
- return False\r
+ def __ParseInfStatement(self):\r
+ if not self.__IsKeyword("INF"):\r
+ return None\r
\r
ffsInf = FfsInfStatement.FfsInfStatement()\r
- self.__GetInfOptions( ffsInf)\r
+ self.__GetInfOptions(ffsInf)\r
\r
if not self.__GetNextToken():\r
raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)\r
ffsInf.KeepReloc = True\r
else:\r
raise Warning("Unknown reloc strip flag '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
- \r
+ return ffsInf\r
+\r
+ ## __GetInfStatement() method\r
+ #\r
+ # Get INF statements\r
+ #\r
+ # @param self The object pointer\r
+ # @param Obj for whom inf statement is got\r
+ # @param MacroDict dictionary used to replace macro\r
+ # @retval True Successfully find inf statement\r
+ # @retval False Not able to find inf statement\r
+ #\r
+ def __GetInfStatement(self, Obj, ForCapsule=False, MacroDict={}):\r
+ ffsInf = self.__ParseInfStatement()\r
+ if not ffsInf:\r
+ return False\r
+\r
if ForCapsule:\r
capsuleFfs = CapsuleData.CapsuleFfs()\r
capsuleFfs.Ffs = ffsInf\r