* [Patch V4] BaseTools: PI 1.6 to support FV extended header contain FV used size
@ 2017-09-30 5:11 Yonghong Zhu
2017-09-30 5:12 ` Gao, Liming
0 siblings, 1 reply; 2+ messages in thread
From: Yonghong Zhu @ 2017-09-30 5:11 UTC (permalink / raw)
To: edk2-devel; +Cc: Yunhua Feng, Liming Gao
From: Yunhua Feng <yunhuax.feng@intel.com>
Per PI 1.6 we added an FV Extended Header entry that would contain the
size of the FV that was in use.
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
---
BaseTools/Source/C/GenFv/GenFvInternalLib.c | 18 ++++++++++++++++--
BaseTools/Source/C/Include/Common/PiFirmwareVolume.h | 6 ++++++
BaseTools/Source/Python/GenFds/FdfParser.py | 2 +-
BaseTools/Source/Python/GenFds/Fv.py | 17 ++++++++++++++++-
4 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
index 01c862e..2b80e79 100644
--- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
+++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
@@ -42,10 +42,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define ARMT_UNCONDITIONAL_JUMP_INSTRUCTION 0xEB000000
#define ARM64_UNCONDITIONAL_JUMP_INSTRUCTION 0x14000000
BOOLEAN mArm = FALSE;
STATIC UINT32 MaxFfsAlignment = 0;
+BOOLEAN VtfFileFlag = FALSE;
EFI_GUID mEfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;
EFI_GUID mFileGuidArray [MAX_NUMBER_OF_FILES_IN_FV];
EFI_GUID mZeroGuid = {0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}};
EFI_GUID mDefaultCapsuleGuid = {0x3B6686BD, 0x0D76, 0x4030, { 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 }};
@@ -598,11 +599,13 @@ Returns:
{
EFI_FFS_FILE_HEADER *PadFile;
UINTN PadFileSize;
UINT32 NextFfsHeaderSize;
UINT32 CurFfsHeaderSize;
+ UINT32 Index;
+ Index = 0;
CurFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
//
// Verify input parameters.
//
if (FvImage == NULL) {
@@ -703,10 +706,23 @@ Returns:
if (ExtHeader != NULL) {
//
// Copy Fv Extension Header and Set Fv Extension header offset
//
+ if (ExtHeader->ExtHeaderSize > sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER)) {
+ for (Index = sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER); Index < ExtHeader->ExtHeaderSize;) {
+ if (((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8 *)ExtHeader + Index))-> ExtEntryType == EFI_FV_EXT_TYPE_USED_SIZE_TYPE) {
+ if (VtfFileFlag) {
+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8 *)ExtHeader + Index))->UsedSize = mFvTotalSize;
+ } else {
+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8 *)ExtHeader + Index))->UsedSize = mFvTakenSize;
+ }
+ break;
+ }
+ Index += ((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8 *)ExtHeader + Index))-> ExtEntrySize;
+ }
+ }
memcpy ((UINT8 *)PadFile + CurFfsHeaderSize, ExtHeader, ExtHeader->ExtHeaderSize);
((EFI_FIRMWARE_VOLUME_HEADER *) FvImage->FileImage)->ExtHeaderOffset = (UINT16) ((UINTN) ((UINT8 *)PadFile + CurFfsHeaderSize) - (UINTN) FvImage->FileImage);
//
// Make next file start at QWord Boundry
//
@@ -3057,16 +3073,14 @@ Returns:
UINTN FfsFileSize;
UINTN FvExtendHeaderSize;
UINT32 FfsAlignment;
UINT32 FfsHeaderSize;
EFI_FFS_FILE_HEADER FfsHeader;
- BOOLEAN VtfFileFlag;
UINTN VtfFileSize;
FvExtendHeaderSize = 0;
VtfFileSize = 0;
- VtfFileFlag = FALSE;
fpin = NULL;
Index = 0;
//
// Compute size for easy access later
diff --git a/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h b/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
index b5c2b03..c3089e8 100644
--- a/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
+++ b/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
@@ -152,6 +152,12 @@ typedef struct {
//
// UINT8 Data[1];
//
} EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;
+#define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03
+typedef struct {
+ EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
+ UINT32 UsedSize;
+} EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;
+
#endif
diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py
index 499d0a6..b95afc7 100644
--- a/BaseTools/Source/Python/GenFds/FdfParser.py
+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
@@ -2309,11 +2309,11 @@ class FdfParser:
if name not in ("ERASE_POLARITY", "MEMORY_MAPPED", \
"STICKY_WRITE", "LOCK_CAP", "LOCK_STATUS", "WRITE_ENABLED_CAP", \
"WRITE_DISABLED_CAP", "WRITE_STATUS", "READ_ENABLED_CAP", \
"READ_DISABLED_CAP", "READ_STATUS", "READ_LOCK_CAP", \
"READ_LOCK_STATUS", "WRITE_LOCK_CAP", "WRITE_LOCK_STATUS", \
- "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT"):
+ "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT", "FvUsedSizeEnable"):
self.__UndoToken()
return False
if not self.__IsToken( "="):
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python/GenFds/Fv.py
index 4b03adc..45f6696 100644
--- a/BaseTools/Source/Python/GenFds/Fv.py
+++ b/BaseTools/Source/Python/GenFds/Fv.py
@@ -49,10 +49,11 @@ class FV (FvClassObject):
self.FvAddressFileName = None
self.CapsuleName = None
self.FvBaseAddress = None
self.FvForceRebase = None
self.FvRegionInFD = None
+ self.UsedSizeEnable = False
## AddToBuffer()
#
# Generate Fv and add it to the Buffer
#
@@ -305,10 +306,14 @@ class FV (FvClassObject):
self.FvInfFile.writelines("EFI_ERASE_POLARITY = " + \
' %s' %ErasePloarity + \
T_CHAR_LF)
if not (self.FvAttributeDict == None):
for FvAttribute in self.FvAttributeDict.keys() :
+ if FvAttribute == "FvUsedSizeEnable":
+ if self.FvAttributeDict[FvAttribute].upper() in ('TRUE', '1') :
+ self.UsedSizeEnable = True
+ continue
self.FvInfFile.writelines("EFI_" + \
FvAttribute + \
' = ' + \
self.FvAttributeDict[FvAttribute] + \
T_CHAR_LF )
@@ -320,16 +325,26 @@ class FV (FvClassObject):
#
# Generate FV extension header file
#
if self.FvNameGuid == None or self.FvNameGuid == '':
- if len(self.FvExtEntryType) > 0:
+ if len(self.FvExtEntryType) > 0 or self.UsedSizeEnable:
GenFdsGlobalVariable.ErrorLogger("FV Extension Header Entries declared for %s with no FvNameGuid declaration." % (self.UiFvName))
if self.FvNameGuid <> None and self.FvNameGuid <> '':
TotalSize = 16 + 4
Buffer = ''
+ if self.UsedSizeEnable:
+ TotalSize += (4 + 4)
+ ## define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03
+ #typedef struct
+ # {
+ # EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
+ # UINT32 UsedSize;
+ # } EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;
+ Buffer += pack('HHL', 8, 3, 0)
+
if self.FvNameString == 'TRUE':
#
# Create EXT entry for FV UI name
# This GUID is used: A67DF1FA-8DE8-4E98-AF09-4BDF2EFFBC7C
#
--
2.6.1.windows.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Patch V4] BaseTools: PI 1.6 to support FV extended header contain FV used size
2017-09-30 5:11 [Patch V4] BaseTools: PI 1.6 to support FV extended header contain FV used size Yonghong Zhu
@ 2017-09-30 5:12 ` Gao, Liming
0 siblings, 0 replies; 2+ messages in thread
From: Gao, Liming @ 2017-09-30 5:12 UTC (permalink / raw)
To: Zhu, Yonghong, edk2-devel@lists.01.org; +Cc: Feng, YunhuaX
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----Original Message-----
>From: Zhu, Yonghong
>Sent: Saturday, September 30, 2017 1:12 PM
>To: edk2-devel@lists.01.org
>Cc: Feng, YunhuaX <yunhuax.feng@intel.com>; Gao, Liming
><liming.gao@intel.com>
>Subject: [Patch V4] BaseTools: PI 1.6 to support FV extended header contain
>FV used size
>
>From: Yunhua Feng <yunhuax.feng@intel.com>
>
>Per PI 1.6 we added an FV Extended Header entry that would contain the
>size of the FV that was in use.
>
>Cc: Liming Gao <liming.gao@intel.com>
>Cc: Yonghong Zhu <yonghong.zhu@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
>---
> BaseTools/Source/C/GenFv/GenFvInternalLib.c | 18
>++++++++++++++++--
> BaseTools/Source/C/Include/Common/PiFirmwareVolume.h | 6 ++++++
> BaseTools/Source/Python/GenFds/FdfParser.py | 2 +-
> BaseTools/Source/Python/GenFds/Fv.py | 17 ++++++++++++++++-
> 4 files changed, 39 insertions(+), 4 deletions(-)
>
>diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
>b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
>index 01c862e..2b80e79 100644
>--- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
>+++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
>@@ -42,10 +42,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
>KIND, EITHER EXPRESS OR IMPLIED.
> #define ARMT_UNCONDITIONAL_JUMP_INSTRUCTION 0xEB000000
> #define ARM64_UNCONDITIONAL_JUMP_INSTRUCTION 0x14000000
>
> BOOLEAN mArm = FALSE;
> STATIC UINT32 MaxFfsAlignment = 0;
>+BOOLEAN VtfFileFlag = FALSE;
>
> EFI_GUID mEfiFirmwareVolumeTopFileGuid =
>EFI_FFS_VOLUME_TOP_FILE_GUID;
> EFI_GUID mFileGuidArray [MAX_NUMBER_OF_FILES_IN_FV];
> EFI_GUID mZeroGuid = {0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0,
>0x0, 0x0, 0x0}};
> EFI_GUID mDefaultCapsuleGuid = {0x3B6686BD, 0x0D76, 0x4030,
>{ 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 }};
>@@ -598,11 +599,13 @@ Returns:
> {
> EFI_FFS_FILE_HEADER *PadFile;
> UINTN PadFileSize;
> UINT32 NextFfsHeaderSize;
> UINT32 CurFfsHeaderSize;
>+ UINT32 Index;
>
>+ Index = 0;
> CurFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
> //
> // Verify input parameters.
> //
> if (FvImage == NULL) {
>@@ -703,10 +706,23 @@ Returns:
>
> if (ExtHeader != NULL) {
> //
> // Copy Fv Extension Header and Set Fv Extension header offset
> //
>+ if (ExtHeader->ExtHeaderSize > sizeof
>(EFI_FIRMWARE_VOLUME_EXT_HEADER)) {
>+ for (Index = sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER); Index <
>ExtHeader->ExtHeaderSize;) {
>+ if (((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8 *)ExtHeader +
>Index))-> ExtEntryType == EFI_FV_EXT_TYPE_USED_SIZE_TYPE) {
>+ if (VtfFileFlag) {
>+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8
>*)ExtHeader + Index))->UsedSize = mFvTotalSize;
>+ } else {
>+ ((EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE *)((UINT8
>*)ExtHeader + Index))->UsedSize = mFvTakenSize;
>+ }
>+ break;
>+ }
>+ Index += ((EFI_FIRMWARE_VOLUME_EXT_ENTRY *)((UINT8
>*)ExtHeader + Index))-> ExtEntrySize;
>+ }
>+ }
> memcpy ((UINT8 *)PadFile + CurFfsHeaderSize, ExtHeader, ExtHeader-
>>ExtHeaderSize);
> ((EFI_FIRMWARE_VOLUME_HEADER *) FvImage->FileImage)-
>>ExtHeaderOffset = (UINT16) ((UINTN) ((UINT8 *)PadFile + CurFfsHeaderSize)
>- (UINTN) FvImage->FileImage);
> //
> // Make next file start at QWord Boundry
> //
>@@ -3057,16 +3073,14 @@ Returns:
> UINTN FfsFileSize;
> UINTN FvExtendHeaderSize;
> UINT32 FfsAlignment;
> UINT32 FfsHeaderSize;
> EFI_FFS_FILE_HEADER FfsHeader;
>- BOOLEAN VtfFileFlag;
> UINTN VtfFileSize;
>
> FvExtendHeaderSize = 0;
> VtfFileSize = 0;
>- VtfFileFlag = FALSE;
> fpin = NULL;
> Index = 0;
>
> //
> // Compute size for easy access later
>diff --git a/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
>b/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
>index b5c2b03..c3089e8 100644
>--- a/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
>+++ b/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h
>@@ -152,6 +152,12 @@ typedef struct {
> //
> // UINT8 Data[1];
> //
> } EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;
>
>+#define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03
>+typedef struct {
>+ EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
>+ UINT32 UsedSize;
>+} EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;
>+
> #endif
>diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
>b/BaseTools/Source/Python/GenFds/FdfParser.py
>index 499d0a6..b95afc7 100644
>--- a/BaseTools/Source/Python/GenFds/FdfParser.py
>+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
>@@ -2309,11 +2309,11 @@ class FdfParser:
> if name not in ("ERASE_POLARITY", "MEMORY_MAPPED", \
> "STICKY_WRITE", "LOCK_CAP", "LOCK_STATUS",
>"WRITE_ENABLED_CAP", \
> "WRITE_DISABLED_CAP", "WRITE_STATUS",
>"READ_ENABLED_CAP", \
> "READ_DISABLED_CAP", "READ_STATUS", "READ_LOCK_CAP", \
> "READ_LOCK_STATUS", "WRITE_LOCK_CAP",
>"WRITE_LOCK_STATUS", \
>- "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT"):
>+ "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT",
>"FvUsedSizeEnable"):
> self.__UndoToken()
> return False
>
> if not self.__IsToken( "="):
> raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
>diff --git a/BaseTools/Source/Python/GenFds/Fv.py
>b/BaseTools/Source/Python/GenFds/Fv.py
>index 4b03adc..45f6696 100644
>--- a/BaseTools/Source/Python/GenFds/Fv.py
>+++ b/BaseTools/Source/Python/GenFds/Fv.py
>@@ -49,10 +49,11 @@ class FV (FvClassObject):
> self.FvAddressFileName = None
> self.CapsuleName = None
> self.FvBaseAddress = None
> self.FvForceRebase = None
> self.FvRegionInFD = None
>+ self.UsedSizeEnable = False
>
> ## AddToBuffer()
> #
> # Generate Fv and add it to the Buffer
> #
>@@ -305,10 +306,14 @@ class FV (FvClassObject):
> self.FvInfFile.writelines("EFI_ERASE_POLARITY = " + \
> ' %s' %ErasePloarity + \
> T_CHAR_LF)
> if not (self.FvAttributeDict == None):
> for FvAttribute in self.FvAttributeDict.keys() :
>+ if FvAttribute == "FvUsedSizeEnable":
>+ if self.FvAttributeDict[FvAttribute].upper() in ('TRUE', '1') :
>+ self.UsedSizeEnable = True
>+ continue
> self.FvInfFile.writelines("EFI_" + \
> FvAttribute + \
> ' = ' + \
> self.FvAttributeDict[FvAttribute] + \
> T_CHAR_LF )
>@@ -320,16 +325,26 @@ class FV (FvClassObject):
>
> #
> # Generate FV extension header file
> #
> if self.FvNameGuid == None or self.FvNameGuid == '':
>- if len(self.FvExtEntryType) > 0:
>+ if len(self.FvExtEntryType) > 0 or self.UsedSizeEnable:
> GenFdsGlobalVariable.ErrorLogger("FV Extension Header Entries
>declared for %s with no FvNameGuid declaration." % (self.UiFvName))
>
> if self.FvNameGuid <> None and self.FvNameGuid <> '':
> TotalSize = 16 + 4
> Buffer = ''
>+ if self.UsedSizeEnable:
>+ TotalSize += (4 + 4)
>+ ## define EFI_FV_EXT_TYPE_USED_SIZE_TYPE 0x03
>+ #typedef struct
>+ # {
>+ # EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
>+ # UINT32 UsedSize;
>+ # } EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE;
>+ Buffer += pack('HHL', 8, 3, 0)
>+
> if self.FvNameString == 'TRUE':
> #
> # Create EXT entry for FV UI name
> # This GUID is used: A67DF1FA-8DE8-4E98-AF09-4BDF2EFFBC7C
> #
>--
>2.6.1.windows.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-09-30 5:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-30 5:11 [Patch V4] BaseTools: PI 1.6 to support FV extended header contain FV used size Yonghong Zhu
2017-09-30 5:12 ` Gao, Liming
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox