\r
BOOLEAN mArm = FALSE;\r
STATIC UINT32 MaxFfsAlignment = 0;\r
+BOOLEAN VtfFileFlag = FALSE;\r
\r
EFI_GUID mEfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;\r
EFI_GUID mFileGuidArray [MAX_NUMBER_OF_FILES_IN_FV];\r
UINTN PadFileSize;\r
UINT32 NextFfsHeaderSize;\r
UINT32 CurFfsHeaderSize;\r
+ UINT32 Index;\r
\r
+ Index = 0;\r
CurFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER);\r
//\r
// Verify input parameters.\r
//\r
// Copy Fv Extension Header and Set Fv Extension header offset\r
//\r
+ if (ExtHeader->ExtHeaderSize > sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER)) {\r
+ for (Index = sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER); Index < ExtHeader->ExtHeaderSize;) {\r
+ if (((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8 *)ExtHeader + Index))-> ExtEntryType == EFI_FV_EXT_TYPE_USED_SIZE_TYPE) {\r
+ if (VtfFileFlag) {\r
+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8 *)ExtHeader + Index))->UsedSize = mFvTotalSize;\r
+ } else {\r
+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8 *)ExtHeader + Index))->UsedSize = mFvTakenSize;\r
+ }\r
+ break;\r
+ }\r
+ Index += ((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8 *)ExtHeader + Index))-> ExtEntrySize;\r
+ }\r
+ }\r
memcpy ((UINT8 *)PadFile + CurFfsHeaderSize, ExtHeader, ExtHeader->ExtHeaderSize);\r
((EFI_FIRMWARE_VOLUME_HEADER *) FvImage->FileImage)->ExtHeaderOffset = (UINT16) ((UINTN) ((UINT8 *)PadFile + CurFfsHeaderSize) - (UINTN) FvImage->FileImage);\r
//\r
UINT32 FfsAlignment;\r
UINT32 FfsHeaderSize;\r
EFI_FFS_FILE_HEADER FfsHeader;\r
- BOOLEAN VtfFileFlag;\r
UINTN VtfFileSize;\r
\r
FvExtendHeaderSize = 0;\r
VtfFileSize = 0;\r
- VtfFileFlag = FALSE;\r
fpin = NULL;\r
Index = 0;\r
\r
//\r
} EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;\r
\r
+#define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03\r
+typedef struct {\r
+ EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
+ UINT32 UsedSize;\r
+} EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;\r
+\r
#endif\r
"WRITE_DISABLED_CAP", "WRITE_STATUS", "READ_ENABLED_CAP", \\r
"READ_DISABLED_CAP", "READ_STATUS", "READ_LOCK_CAP", \\r
"READ_LOCK_STATUS", "WRITE_LOCK_CAP", "WRITE_LOCK_STATUS", \\r
- "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT"):\r
+ "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT", "FvUsedSizeEnable"):\r
self.__UndoToken()\r
return False\r
\r
self.FvBaseAddress = None\r
self.FvForceRebase = None\r
self.FvRegionInFD = None\r
+ self.UsedSizeEnable = False\r
\r
## AddToBuffer()\r
#\r
T_CHAR_LF)\r
if not (self.FvAttributeDict == None):\r
for FvAttribute in self.FvAttributeDict.keys() :\r
+ if FvAttribute == "FvUsedSizeEnable":\r
+ if self.FvAttributeDict[FvAttribute].upper() in ('TRUE', '1') :\r
+ self.UsedSizeEnable = True\r
+ continue\r
self.FvInfFile.writelines("EFI_" + \\r
FvAttribute + \\r
' = ' + \\r
# Generate FV extension header file\r
#\r
if self.FvNameGuid == None or self.FvNameGuid == '':\r
- if len(self.FvExtEntryType) > 0:\r
+ if len(self.FvExtEntryType) > 0 or self.UsedSizeEnable:\r
GenFdsGlobalVariable.ErrorLogger("FV Extension Header Entries declared for %s with no FvNameGuid declaration." % (self.UiFvName))\r
\r
if self.FvNameGuid <> None and self.FvNameGuid <> '':\r
TotalSize = 16 + 4\r
Buffer = ''\r
+ if self.UsedSizeEnable:\r
+ TotalSize += (4 + 4)\r
+ ## define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03\r
+ #typedef struct\r
+ # {\r
+ # EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;\r
+ # UINT32 UsedSize;\r
+ # } EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;\r
+ Buffer += pack('HHL', 8, 3, 0)\r
+\r
if self.FvNameString == 'TRUE':\r
#\r
# Create EXT entry for FV UI name\r