* [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
@ 2020-02-12 6:23 Feng, YunhuaX
2020-02-19 13:01 ` Liming Gao
0 siblings, 1 reply; 2+ messages in thread
From: Feng, YunhuaX @ 2020-02-12 6:23 UTC (permalink / raw)
To: devel@edk2.groups.io; +Cc: Gao, Liming, Feng, Bob C
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2521
1. If FFS file has no UI section, its FILE_GUID will be used as its name.
FMMT tool -d/-a/-r option can be updated to support such FFS file.
2. -v option will print FILE_GUID if no UI section
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Yunhua Feng<yunhuax.feng@intel.com>
---
BaseTools/Source/C/FMMT/FirmwareModuleManagement.c | 22 +++++++--
BaseTools/Source/C/FMMT/FmmtLib.c | 56 ++++++++++++++++++++++
2 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
index e4fbb5461f..a786113899 100644
--- a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
+++ b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
@@ -79,11 +79,11 @@ Usage (
Delete the entire FV in an FD binary\n");
//
// Command Line for Delete file from FV
//
- fprintf (stdout, " -d <input-binary-file> <FV-id> <File-Name> [<FV-id> <File-Name> ...] <output-binary-file>\n\
+ fprintf (stdout, " -d <input-binary-file> <FV-id> <File-Name|File-Guid> [<FV-id> <File-Name|File-Guid> ...] <output-binary-file>\n\
Delete a file (or files) from the firmware volume in an FD binary\n");
//
// Command Line for Add
//
@@ -91,11 +91,11 @@ Usage (
Add a file (or files) to the firmware volume in an FD binary\n");
//
// Command Line for Replace
//
- fprintf (stdout, " -r <input-binary-file> <FV-id> <File-Name> <NewFilePath> [<FV-id> <File-Name> <NewFilePath> ...] <output-binary-file>\n\
+ fprintf (stdout, " -r <input-binary-file> <FV-id> <File-Name|File-Guid> <NewFilePath> [<FV-id> <File-Name|File-Guid> <NewFilePath> ...] <output-binary-file>\n\
The replace command combines the functionality of remove and add into a single operation.\n");
fprintf (stdout, "\nNote:\n");
fprintf (stdout, " <FV-id> is the sequence of the firmware volume included in the FD image, it both support the sequentially format like FV0, FV1 and the FV's file guid value format.\n");
return;
@@ -583,10 +583,11 @@ NeedNewPath(FV_INFORMATION *FvInFd, CHAR8 *FvId, UINT32 FileIndex, BOOLEAN IsAdd
static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT32 *MatchIndex) {
UINT32 Index = 0;
CHAR16 *UIName;
CHAR16 *FfsUIName;
UINT32 FileNumber = 0;
+ EFI_GUID Guid;
UIName = (CHAR16 *)malloc(_MAX_PATH);
if (NULL == UIName) {
return 0;
}
@@ -612,11 +613,22 @@ static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT3
}
}
free(UIName);
free(FfsUIName);
-
+ if (FileNumber == 0) {
+ StringToGuid(File, &Guid);
+ for (Index = 0; Index <= FvInFd->FfsNumbers; Index++) {
+ if (CompareGuid (&Guid, &FvInFd->FfsAttuibutes[Index].GuidName) == 0) {
+ FileNumber += 1;
+ *MatchIndex = Index;
+ if (FileNumber > 1) {
+ break;
+ }
+ }
+ }
+ }
return FileNumber;
}
/**
Search the config file from the path list.
@@ -1089,11 +1101,11 @@ FmmtImageAdd(
goto FAILED;
}
HasUISection = FALSE;
HasUISection = ParseSection(InputFfs);
if (!HasUISection) {
- printf ("WARNING: The newly add file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
+ printf ("WARNING: The newly add file not have a user interface (UI) section. \n");
}
if (NeedNewPath(FvInFd, FvId, 0, TRUE)) {
do {
NewFile = NewFileNode->FileName;
//
@@ -1845,11 +1857,11 @@ FmmtImageReplace (
return EFI_ABORTED;
}
HasUISection = FALSE;
HasUISection = ParseSection(InputFfs);
if (!HasUISection) {
- printf ("WARNING: The newly replace file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
+ printf ("WARNING: The newly replace file not have a user interface (UI) section. \n");
}
if (FfsFoundFlag && NeedNewPath(FvInFd, FvId, Index, FALSE)) {
do {
OldFile = OldFileNode -> FileName;
NewFile = NewFileNode -> FileName;
diff --git a/BaseTools/Source/C/FMMT/FmmtLib.c b/BaseTools/Source/C/FMMT/FmmtLib.c
index 78b6f3a21d..685ef634f2 100644
--- a/BaseTools/Source/C/FMMT/FmmtLib.c
+++ b/BaseTools/Source/C/FMMT/FmmtLib.c
@@ -824,10 +824,11 @@ LibParseSection (
UINT16 GuidAttr;
UINT16 DataOffset;
CHAR8 *UIFileName;
CHAR8 *ToolInputFileName;
CHAR8 *ToolOutputFileName;
+ BOOLEAN HasUiSection;
DataOffset = 0;
GuidAttr = 0;
ParsedLength = 0;
ToolOutputLength = 0;
@@ -858,10 +859,11 @@ LibParseSection (
ToolInputFileName = NULL;
ToolOutputFileFullName = NULL;
HasDepexSection = FALSE;
EncapDataNeedUpdata = TRUE;
LargeHeaderOffset = 0;
+ HasUiSection = FALSE;
while (ParsedLength < BufferLength) {
Ptr = SectionBuffer + ParsedLength;
@@ -888,10 +890,11 @@ LibParseSection (
switch (Type) {
case EFI_SECTION_FIRMWARE_VOLUME_IMAGE:
EncapDataNeedUpdata = TRUE;
+ HasUiSection = TRUE;
Level ++;
NumberOfSections ++;
CurrentFv->FfsAttuibutes[*FfsCount].IsLeaf = FALSE;
@@ -988,10 +991,11 @@ LibParseSection (
case EFI_SECTION_COMPRESSION:
Level ++;
NumberOfSections ++;
EncapDataNeedUpdata = TRUE;
+ HasUiSection = TRUE;
//
// Put in encapsulate data information.
//
LocalEncapData = *CurrentFvEncapData;
if (LocalEncapData->NextNode != NULL) {
@@ -1166,10 +1170,11 @@ LibParseSection (
// a GUID defined FV section.
//
Level ++;
NumberOfSections++;
EncapDataNeedUpdata = TRUE;
+ HasUiSection = TRUE;
//
// Put in encapsulate data information.
//
LocalEncapData = *CurrentFvEncapData;
if (LocalEncapData->NextNode != NULL) {
@@ -1593,10 +1598,11 @@ LibParseSection (
memcpy(CurrentFv->FfsAttuibutes[*FfsCount].Depex, Ptr, SectionLength);
CurrentFv->FfsAttuibutes[*FfsCount].DepexLen = SectionLength;
break;
case EFI_SECTION_USER_INTERFACE:
+ HasUiSection = TRUE;
NumberOfSections ++;
CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
UiSectionLength = GetLength (((EFI_USER_INTERFACE_SECTION *) Ptr)->CommonHeader.Size);
if (UiSectionLength == 0xffffff) {
@@ -1669,10 +1675,34 @@ LibParseSection (
if (ParsedLength < BufferLength) {
Error ("FMMT", 0, 0003, "sections do not completely fill the sectioned buffer being parsed", NULL);
return EFI_SECTION_ERROR;
}
+ if (ViewFlag && !HasUiSection) {
+ //
+ //print FILE FFS GUID name
+ //
+ BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
+ if (BlankChar == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
+ CurrentFile->Name.Data1,
+ CurrentFile->Name.Data2,
+ CurrentFile->Name.Data3,
+ CurrentFile->Name.Data4[0],
+ CurrentFile->Name.Data4[1],
+ CurrentFile->Name.Data4[2],
+ CurrentFile->Name.Data4[3],
+ CurrentFile->Name.Data4[4],
+ CurrentFile->Name.Data4[5],
+ CurrentFile->Name.Data4[6],
+ CurrentFile->Name.Data4[7]
+ );
+ free(BlankChar);
+ }
return EFI_SUCCESS;
}
/**
@@ -1819,16 +1849,18 @@ LibGetFileInfo (
UINT8 GuidBuffer[PRINTED_GUID_BUFFER_SIZE];
ENCAP_INFO_DATA *LocalEncapData;
BOOLEAN EncapDataNeedUpdateFlag;
BOOLEAN IsGeneratedFfs;
UINT32 FfsFileHeaderSize;
+ CHAR8 *BlankChar;
Status = EFI_SUCCESS;
LocalEncapData = NULL;
EncapDataNeedUpdateFlag = TRUE;
IsGeneratedFfs = FALSE;
+ BlankChar = NULL;
FfsFileHeaderSize = GetFfsHeaderLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
FileLength = GetFfsFileLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
//
@@ -1999,10 +2031,34 @@ LibGetFileInfo (
if ( CurrentFile->Type == EFI_FV_FILETYPE_RAW){
CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
if (!ViewFlag){
LibGenFfsFile(CurrentFile, CurrentFv, FvName, Level, FfsCount, ErasePolarity);
+ } else {
+ //
+ // print EFI_FV_FILETYPE_RAW GUID
+ //
+ BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
+ if (BlankChar == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
+ CurrentFile->Name.Data1,
+ CurrentFile->Name.Data2,
+ CurrentFile->Name.Data3,
+ CurrentFile->Name.Data4[0],
+ CurrentFile->Name.Data4[1],
+ CurrentFile->Name.Data4[2],
+ CurrentFile->Name.Data4[3],
+ CurrentFile->Name.Data4[4],
+ CurrentFile->Name.Data4[5],
+ CurrentFile->Name.Data4[6],
+ CurrentFile->Name.Data4[7]
+ );
+ free(BlankChar);
+
}
} else if( CurrentFile->Type == EFI_FV_FILETYPE_FFS_PAD){
//EFI_FV_FILETYPE_FFS_PAD
} else {
//
--
2.12.2.windows.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
2020-02-12 6:23 [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS Feng, YunhuaX
@ 2020-02-19 13:01 ` Liming Gao
0 siblings, 0 replies; 2+ messages in thread
From: Liming Gao @ 2020-02-19 13:01 UTC (permalink / raw)
To: Feng, YunhuaX, devel@edk2.groups.io; +Cc: Feng, Bob C
Reviewed-by: Liming Gao <liming.gao@intel.com>
> -----Original Message-----
> From: Feng, YunhuaX <yunhuax.feng@intel.com>
> Sent: Wednesday, February 12, 2020 2:24 PM
> To: devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@intel.com>
> Subject: [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2521
>
> 1. If FFS file has no UI section, its FILE_GUID will be used as its name.
> FMMT tool -d/-a/-r option can be updated to support such FFS file.
> 2. -v option will print FILE_GUID if no UI section
>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Yunhua Feng<yunhuax.feng@intel.com>
> ---
> BaseTools/Source/C/FMMT/FirmwareModuleManagement.c | 22 +++++++--
> BaseTools/Source/C/FMMT/FmmtLib.c | 56 ++++++++++++++++++++++
> 2 files changed, 73 insertions(+), 5 deletions(-)
>
> diff --git a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> index e4fbb5461f..a786113899 100644
> --- a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> +++ b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> @@ -79,11 +79,11 @@ Usage (
> Delete the entire FV in an FD binary\n");
>
> //
> // Command Line for Delete file from FV
> //
> - fprintf (stdout, " -d <input-binary-file> <FV-id> <File-Name> [<FV-id> <File-Name> ...] <output-binary-file>\n\
> + fprintf (stdout, " -d <input-binary-file> <FV-id> <File-Name|File-Guid> [<FV-id> <File-Name|File-Guid> ...] <output-binary-file>\n\
> Delete a file (or files) from the firmware volume in an FD binary\n");
>
> //
> // Command Line for Add
> //
> @@ -91,11 +91,11 @@ Usage (
> Add a file (or files) to the firmware volume in an FD binary\n");
>
> //
> // Command Line for Replace
> //
> - fprintf (stdout, " -r <input-binary-file> <FV-id> <File-Name> <NewFilePath> [<FV-id> <File-Name> <NewFilePath> ...] <output-binary-
> file>\n\
> + fprintf (stdout, " -r <input-binary-file> <FV-id> <File-Name|File-Guid> <NewFilePath> [<FV-id> <File-Name|File-Guid>
> <NewFilePath> ...] <output-binary-file>\n\
> The replace command combines the functionality of remove and add into a single operation.\n");
>
> fprintf (stdout, "\nNote:\n");
> fprintf (stdout, " <FV-id> is the sequence of the firmware volume included in the FD image, it both support the sequentially format like
> FV0, FV1 and the FV's file guid value format.\n");
> return;
> @@ -583,10 +583,11 @@ NeedNewPath(FV_INFORMATION *FvInFd, CHAR8 *FvId, UINT32 FileIndex, BOOLEAN IsAdd
> static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT32 *MatchIndex) {
> UINT32 Index = 0;
> CHAR16 *UIName;
> CHAR16 *FfsUIName;
> UINT32 FileNumber = 0;
> + EFI_GUID Guid;
>
> UIName = (CHAR16 *)malloc(_MAX_PATH);
> if (NULL == UIName) {
> return 0;
> }
> @@ -612,11 +613,22 @@ static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT3
> }
>
> }
> free(UIName);
> free(FfsUIName);
> -
> + if (FileNumber == 0) {
> + StringToGuid(File, &Guid);
> + for (Index = 0; Index <= FvInFd->FfsNumbers; Index++) {
> + if (CompareGuid (&Guid, &FvInFd->FfsAttuibutes[Index].GuidName) == 0) {
> + FileNumber += 1;
> + *MatchIndex = Index;
> + if (FileNumber > 1) {
> + break;
> + }
> + }
> + }
> + }
> return FileNumber;
> }
>
> /**
> Search the config file from the path list.
> @@ -1089,11 +1101,11 @@ FmmtImageAdd(
> goto FAILED;
> }
> HasUISection = FALSE;
> HasUISection = ParseSection(InputFfs);
> if (!HasUISection) {
> - printf ("WARNING: The newly add file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
> + printf ("WARNING: The newly add file not have a user interface (UI) section. \n");
> }
> if (NeedNewPath(FvInFd, FvId, 0, TRUE)) {
> do {
> NewFile = NewFileNode->FileName;
> //
> @@ -1845,11 +1857,11 @@ FmmtImageReplace (
> return EFI_ABORTED;
> }
> HasUISection = FALSE;
> HasUISection = ParseSection(InputFfs);
> if (!HasUISection) {
> - printf ("WARNING: The newly replace file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
> + printf ("WARNING: The newly replace file not have a user interface (UI) section. \n");
> }
> if (FfsFoundFlag && NeedNewPath(FvInFd, FvId, Index, FALSE)) {
> do {
> OldFile = OldFileNode -> FileName;
> NewFile = NewFileNode -> FileName;
> diff --git a/BaseTools/Source/C/FMMT/FmmtLib.c b/BaseTools/Source/C/FMMT/FmmtLib.c
> index 78b6f3a21d..685ef634f2 100644
> --- a/BaseTools/Source/C/FMMT/FmmtLib.c
> +++ b/BaseTools/Source/C/FMMT/FmmtLib.c
> @@ -824,10 +824,11 @@ LibParseSection (
> UINT16 GuidAttr;
> UINT16 DataOffset;
> CHAR8 *UIFileName;
> CHAR8 *ToolInputFileName;
> CHAR8 *ToolOutputFileName;
> + BOOLEAN HasUiSection;
>
> DataOffset = 0;
> GuidAttr = 0;
> ParsedLength = 0;
> ToolOutputLength = 0;
> @@ -858,10 +859,11 @@ LibParseSection (
> ToolInputFileName = NULL;
> ToolOutputFileFullName = NULL;
> HasDepexSection = FALSE;
> EncapDataNeedUpdata = TRUE;
> LargeHeaderOffset = 0;
> + HasUiSection = FALSE;
>
>
> while (ParsedLength < BufferLength) {
> Ptr = SectionBuffer + ParsedLength;
>
> @@ -888,10 +890,11 @@ LibParseSection (
> switch (Type) {
>
> case EFI_SECTION_FIRMWARE_VOLUME_IMAGE:
>
> EncapDataNeedUpdata = TRUE;
> + HasUiSection = TRUE;
>
> Level ++;
> NumberOfSections ++;
>
> CurrentFv->FfsAttuibutes[*FfsCount].IsLeaf = FALSE;
> @@ -988,10 +991,11 @@ LibParseSection (
> case EFI_SECTION_COMPRESSION:
> Level ++;
> NumberOfSections ++;
>
> EncapDataNeedUpdata = TRUE;
> + HasUiSection = TRUE;
> //
> // Put in encapsulate data information.
> //
> LocalEncapData = *CurrentFvEncapData;
> if (LocalEncapData->NextNode != NULL) {
> @@ -1166,10 +1170,11 @@ LibParseSection (
> // a GUID defined FV section.
> //
> Level ++;
> NumberOfSections++;
> EncapDataNeedUpdata = TRUE;
> + HasUiSection = TRUE;
> //
> // Put in encapsulate data information.
> //
> LocalEncapData = *CurrentFvEncapData;
> if (LocalEncapData->NextNode != NULL) {
> @@ -1593,10 +1598,11 @@ LibParseSection (
> memcpy(CurrentFv->FfsAttuibutes[*FfsCount].Depex, Ptr, SectionLength);
> CurrentFv->FfsAttuibutes[*FfsCount].DepexLen = SectionLength;
> break;
>
> case EFI_SECTION_USER_INTERFACE:
> + HasUiSection = TRUE;
> NumberOfSections ++;
> CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
>
> UiSectionLength = GetLength (((EFI_USER_INTERFACE_SECTION *) Ptr)->CommonHeader.Size);
> if (UiSectionLength == 0xffffff) {
> @@ -1669,10 +1675,34 @@ LibParseSection (
> if (ParsedLength < BufferLength) {
> Error ("FMMT", 0, 0003, "sections do not completely fill the sectioned buffer being parsed", NULL);
> return EFI_SECTION_ERROR;
> }
>
> + if (ViewFlag && !HasUiSection) {
> + //
> + //print FILE FFS GUID name
> + //
> + BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
> + if (BlankChar == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
> + CurrentFile->Name.Data1,
> + CurrentFile->Name.Data2,
> + CurrentFile->Name.Data3,
> + CurrentFile->Name.Data4[0],
> + CurrentFile->Name.Data4[1],
> + CurrentFile->Name.Data4[2],
> + CurrentFile->Name.Data4[3],
> + CurrentFile->Name.Data4[4],
> + CurrentFile->Name.Data4[5],
> + CurrentFile->Name.Data4[6],
> + CurrentFile->Name.Data4[7]
> + );
> + free(BlankChar);
> + }
>
> return EFI_SUCCESS;
> }
>
> /**
> @@ -1819,16 +1849,18 @@ LibGetFileInfo (
> UINT8 GuidBuffer[PRINTED_GUID_BUFFER_SIZE];
> ENCAP_INFO_DATA *LocalEncapData;
> BOOLEAN EncapDataNeedUpdateFlag;
> BOOLEAN IsGeneratedFfs;
> UINT32 FfsFileHeaderSize;
> + CHAR8 *BlankChar;
>
> Status = EFI_SUCCESS;
>
> LocalEncapData = NULL;
> EncapDataNeedUpdateFlag = TRUE;
> IsGeneratedFfs = FALSE;
> + BlankChar = NULL;
>
> FfsFileHeaderSize = GetFfsHeaderLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
> FileLength = GetFfsFileLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
>
> //
> @@ -1999,10 +2031,34 @@ LibGetFileInfo (
>
> if ( CurrentFile->Type == EFI_FV_FILETYPE_RAW){
> CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
> if (!ViewFlag){
> LibGenFfsFile(CurrentFile, CurrentFv, FvName, Level, FfsCount, ErasePolarity);
> + } else {
> + //
> + // print EFI_FV_FILETYPE_RAW GUID
> + //
> + BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
> + if (BlankChar == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
> + CurrentFile->Name.Data1,
> + CurrentFile->Name.Data2,
> + CurrentFile->Name.Data3,
> + CurrentFile->Name.Data4[0],
> + CurrentFile->Name.Data4[1],
> + CurrentFile->Name.Data4[2],
> + CurrentFile->Name.Data4[3],
> + CurrentFile->Name.Data4[4],
> + CurrentFile->Name.Data4[5],
> + CurrentFile->Name.Data4[6],
> + CurrentFile->Name.Data4[7]
> + );
> + free(BlankChar);
> +
> }
> } else if( CurrentFile->Type == EFI_FV_FILETYPE_FFS_PAD){
> //EFI_FV_FILETYPE_FFS_PAD
> } else {
> //
> --
> 2.12.2.windows.2
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-02-19 13:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-12 6:23 [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS Feng, YunhuaX
2020-02-19 13:01 ` Liming Gao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox