\r
Num = SecNum\r
\r
- for FileName in FileList:\r
+ MaxFvAlignment = 0\r
+ for FvFileName in FileList:\r
+ FvAlignmentValue = 0\r
+ if os.path.isfile(FvFileName):\r
+ FvFileObj = open (FvFileName,'rb')\r
+ FvFileObj.seek(0)\r
+ # PI FvHeader is 0x48 byte\r
+ FvHeaderBuffer = FvFileObj.read(0x48)\r
+ # FV alignment position.\r
+ FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)\r
+ FvFileObj.close()\r
+ if FvAlignmentValue > MaxFvAlignment:\r
+ MaxFvAlignment = FvAlignmentValue\r
+\r
OutputFile = os.path.join(OutputPath, ModuleName + 'SEC' + Num + Ffs.SectionSuffix.get("FV_IMAGE"))\r
GenFdsGlobalVariable.GenerateSection(OutputFile, [FvFileName], 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE')\r
OutputFileList.append(OutputFile)\r
+\r
+ # MaxFvAlignment is larger than or equal to 1K\r
+ if MaxFvAlignment >= 0x400:\r
+ if MaxFvAlignment >= 0x10000:\r
+ #The max alignment supported by FFS is 64K.\r
+ self.Alignment = "64K"\r
+ else:\r
+ self.Alignment = str (MaxFvAlignment / 0x400) + "K"\r
+ else:\r
+ # MaxFvAlignment is less than 1K\r
+ self.Alignment = str (MaxFvAlignment)\r
+\r
return OutputFileList, self.Alignment\r
#\r
# Generate Fv\r
if self.FvFileName != None:\r
FvFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FvFileName)\r
if os.path.isfile(FvFileName):\r
- FvFileObj = open (FvFileName,'r+b')\r
+ FvFileObj = open (FvFileName,'rb')\r
FvFileObj.seek(0)\r
# PI FvHeader is 0x48 byte\r
FvHeaderBuffer = FvFileObj.read(0x48)\r