- FileSize += sizeof (EFI_FFS_FILE_HEADER);\r
- VerboseMsg ("the size of the genreated FFS file is %d bytes", FileSize);\r
- FfsFileHeader.Size[0] = (UINT8) (FileSize & 0xFF);\r
- FfsFileHeader.Size[1] = (UINT8) ((FileSize & 0xFF00) >> 8);\r
- FfsFileHeader.Size[2] = (UINT8) ((FileSize & 0xFF0000) >> 16);\r
+ if (FileSize + sizeof (EFI_FFS_FILE_HEADER) >= MAX_FFS_SIZE) {\r
+ HeaderSize = sizeof (EFI_FFS_FILE_HEADER2);\r
+ FileSize += sizeof (EFI_FFS_FILE_HEADER2);\r
+ FfsFileHeader.ExtendedSize = FileSize;\r
+ memset(FfsFileHeader.Size, 0, sizeof (UINT8) * 3);\r
+ FfsAttrib |= FFS_ATTRIB_LARGE_FILE;\r
+ } else {\r
+ HeaderSize = sizeof (EFI_FFS_FILE_HEADER);\r
+ FileSize += sizeof (EFI_FFS_FILE_HEADER);\r
+ FfsFileHeader.Size[0] = (UINT8) (FileSize & 0xFF);\r
+ FfsFileHeader.Size[1] = (UINT8) ((FileSize & 0xFF00) >> 8);\r
+ FfsFileHeader.Size[2] = (UINT8) ((FileSize & 0xFF0000) >> 16);\r
+ }\r
+ VerboseMsg ("the size of the generated FFS file is %u bytes", (unsigned) FileSize);\r
+\r
+ FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (FfsAlign << 3));\r
+\r