+ FileName = RegionData\r
+ elif RegionData.upper() + 'fv' in ImageBinDict.keys():\r
+ GenFdsGlobalVariable.InfLogger(' Region Name = FV')\r
+ FileName = ImageBinDict[RegionData.upper() + 'fv']\r
+ else:\r
+ #\r
+ # Generate FvImage.\r
+ #\r
+ FvObj = None\r
+ if RegionData.upper() in GenFdsGlobalVariable.FdfParser.Profile.FvDict.keys():\r
+ FvObj = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(RegionData.upper())\r
+\r
+ if FvObj != None :\r
+ GenFdsGlobalVariable.InfLogger(' Region Name = FV')\r
+ #\r
+ # Call GenFv tool\r
+ #\r
+ BlockSize = RegionBlockSize\r
+ BlockNum = RegionBlockNum\r
+ if FvObj.BlockSizeList != []:\r
+ if FvObj.BlockSizeList[0][0] != None:\r
+ BlockSize = FvObj.BlockSizeList[0][0]\r
+ if FvObj.BlockSizeList[0][1] != None:\r
+ BlockNum = FvObj.BlockSizeList[0][1]\r
+ self.FvAddress = self.FvAddress + FvOffset\r
+ FvAlignValue = self.GetFvAlignValue(FvObj.FvAlignment)\r
+ if self.FvAddress % FvAlignValue != 0:\r
+ EdkLogger.error("GenFds", GENFDS_ERROR,\r
+ "FV (%s) is NOT %s Aligned!" % (FvObj.UiFvName, FvObj.FvAlignment))\r
+ FvBuffer = StringIO.StringIO('')\r
+ FvBaseAddress = '0x%X' %self.FvAddress\r
+ FvObj.AddToBuffer(FvBuffer, FvBaseAddress, BlockSize, BlockNum, ErasePolarity, vtfDict)\r
+ if FvBuffer.len > Size:\r
+ FvBuffer.close()\r
+ EdkLogger.error("GenFds", GENFDS_ERROR,\r
+ "Size of FV (%s) is larger than Region Size 0x%X specified." % (RegionData, Size))\r
+ #\r
+ # Put the generated image into FD buffer.\r
+ #\r
+ Buffer.write(FvBuffer.getvalue())\r
+ FvBuffer.close()\r
+ FvOffset = FvOffset + FvBuffer.len\r
+ Size = Size - FvBuffer.len\r
+ continue\r
+ else:\r
+ EdkLogger.error("GenFds", GENFDS_ERROR, "FV (%s) is NOT described in FDF file!" % (RegionData))\r
+ #\r
+ # Add the exist Fv image into FD buffer\r
+ #\r
+ if FileName != None:\r
+ FileLength = os.stat(FileName)[ST_SIZE]\r
+ if FileLength > Size:\r