From: "Gao, Liming" <liming.gao@intel.com>
To: "Zhu, Yonghong" <yonghong.zhu@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch] BaseTools: Extend FMP to support FV statement and FD statement
Date: Mon, 10 Oct 2016 02:36:43 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14B482789@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <1475979888-27736-1-git-send-email-yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
> -----Original Message-----
> From: Zhu, Yonghong
> Sent: Sunday, October 09, 2016 10:25 AM
> To: edk2-devel@lists.01.org
> Cc: Gao, Liming <liming.gao@intel.com>
> Subject: [Patch] BaseTools: Extend FMP to support FV statement and FD
> statement
>
> This patch extend the <FmpFileData> to support <FvStatements> and
> <FdStatenents>, just like the normal [Capsule] section format.
> In order to fix the bug https://bugzilla.tianocore.org/show_bug.cgi?id=132
>
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
> ---
> BaseTools/Source/Python/GenFds/Capsule.py | 6 +++
> BaseTools/Source/Python/GenFds/CapsuleData.py | 4 +-
> BaseTools/Source/Python/GenFds/FdfParser.py | 59
> ++++++++++++++++++++-------
> 3 files changed, 53 insertions(+), 16 deletions(-)
>
> diff --git a/BaseTools/Source/Python/GenFds/Capsule.py
> b/BaseTools/Source/Python/GenFds/Capsule.py
> index c98c054..d025f0c 100644
> --- a/BaseTools/Source/Python/GenFds/Capsule.py
> +++ b/BaseTools/Source/Python/GenFds/Capsule.py
> @@ -139,10 +139,16 @@ class Capsule (CapsuleClassObject) :
> PreSize += os.path.getsize(FileName)
> File = open(FileName, 'rb')
> Content.write(File.read())
> File.close()
> for fmp in self.FmpPayloadList:
> + if fmp.ImageFile:
> + for Obj in fmp.ImageFile:
> + fmp.ImageFile = Obj.GenCapsuleSubItem()
> + if fmp.VendorCodeFile:
> + for Obj in fmp.VendorCodeFile:
> + fmp.VendorCodeFile = Obj.GenCapsuleSubItem()
> if fmp.Certificate_Guid:
> ExternalTool, ExternalOption = FindExtendTool([],
> GenFdsGlobalVariable.ArchList, fmp.Certificate_Guid)
> CmdOption = ''
> CapInputFile = fmp.ImageFile
> if not os.path.isabs(fmp.ImageFile):
> diff --git a/BaseTools/Source/Python/GenFds/CapsuleData.py
> b/BaseTools/Source/Python/GenFds/CapsuleData.py
> index 07cc198..d7a6d54 100644
> --- a/BaseTools/Source/Python/GenFds/CapsuleData.py
> +++ b/BaseTools/Source/Python/GenFds/CapsuleData.py
> @@ -177,12 +177,12 @@ class CapsulePayload(CapsuleData):
> self.UiName = None
> self.Version = None
> self.ImageTypeId = None
> self.ImageIndex = None
> self.HardwareInstance = None
> - self.ImageFile = None
> - self.VendorCodeFile = None
> + self.ImageFile = []
> + self.VendorCodeFile = []
> self.Certificate_Guid = None
> self.MonotonicCount = None
>
> def GenCapsuleSubItem(self, AuthData=[]):
> if not self.Version:
> diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
> b/BaseTools/Source/Python/GenFds/FdfParser.py
> index 02ae7c9..64f634f 100644
> --- a/BaseTools/Source/Python/GenFds/FdfParser.py
> +++ b/BaseTools/Source/Python/GenFds/FdfParser.py
> @@ -3257,19 +3257,16 @@ class FdfParser:
> FmpKeyList.remove('CERTIFICATE_GUID')
> if 'MONOTONIC_COUNT' in FmpKeyList:
> FmpKeyList.remove('MONOTONIC_COUNT')
> if FmpKeyList:
> raise Warning("Missing keywords %s in FMP payload section." % ',
> '.join(FmpKeyList), self.FileName, self.CurrentLineNumber)
> - ImageFile = self.__ParseRawFileStatement()
> - if not ImageFile:
> + # get the Image file and Vendor code file
> + self.__GetFMPCapsuleData(FmpData)
> + if not FmpData.ImageFile:
> raise Warning("Missing image file in FMP payload section.",
> self.FileName, self.CurrentLineNumber)
> - FmpData.ImageFile = ImageFile
> - VendorCodeFile = self.__ParseRawFileStatement()
> - if VendorCodeFile:
> - FmpData.VendorCodeFile = VendorCodeFile
> - AdditionalFile = self.__ParseRawFileStatement()
> - if AdditionalFile:
> + # check whether more than one Vendor code file
> + if len(FmpData.VendorCodeFile) > 1:
> raise Warning("At most one Image file and one Vendor code file are
> allowed in FMP payload section.", self.FileName, self.CurrentLineNumber)
> self.Profile.FmpPayloadDict[FmpUiName] = FmpData
> return True
>
> ## __GetCapsule() method
> @@ -3398,20 +3395,36 @@ class FdfParser:
> IsAfile = self.__GetAfileStatement(Obj)
> IsFmp = self.__GetFmpStatement(Obj)
> if not (IsInf or IsFile or IsFv or IsFd or IsAnyFile or IsAfile or IsFmp):
> break
>
> + ## __GetFMPCapsuleData() method
> + #
> + # Get capsule data for FMP capsule
> + #
> + # @param self The object pointer
> + # @param Obj for whom capsule data are got
> + #
> + def __GetFMPCapsuleData(self, Obj):
> +
> + while True:
> + IsFv = self.__GetFvStatement(Obj, True)
> + IsFd = self.__GetFdStatement(Obj, True)
> + IsAnyFile = self.__GetAnyFileStatement(Obj, True)
> + if not (IsFv or IsFd or IsAnyFile):
> + break
> +
> ## __GetFvStatement() method
> #
> # Get FV for capsule
> #
> # @param self The object pointer
> # @param CapsuleObj for whom FV is got
> # @retval True Successfully find a FV statement
> # @retval False Not able to find a FV statement
> #
> - def __GetFvStatement(self, CapsuleObj):
> + def __GetFvStatement(self, CapsuleObj, FMPCapsule = False):
>
> if not self.__IsKeyword("FV"):
> return False
>
> if not self.__IsToken("="):
> @@ -3423,11 +3436,17 @@ class FdfParser:
> if self.__Token.upper() not in self.Profile.FvDict.keys():
> raise Warning("FV name does not exist", self.FileName,
> self.CurrentLineNumber)
>
> CapsuleFv = CapsuleData.CapsuleFv()
> CapsuleFv.FvName = self.__Token
> - CapsuleObj.CapsuleDataList.append(CapsuleFv)
> + if FMPCapsule:
> + if not CapsuleObj.ImageFile:
> + CapsuleObj.ImageFile.append(CapsuleFv)
> + else:
> + CapsuleObj.VendorCodeFile.append(CapsuleFv)
> + else:
> + CapsuleObj.CapsuleDataList.append(CapsuleFv)
> return True
>
> ## __GetFdStatement() method
> #
> # Get FD for capsule
> @@ -3435,11 +3454,11 @@ class FdfParser:
> # @param self The object pointer
> # @param CapsuleObj for whom FD is got
> # @retval True Successfully find a FD statement
> # @retval False Not able to find a FD statement
> #
> - def __GetFdStatement(self, CapsuleObj):
> + def __GetFdStatement(self, CapsuleObj, FMPCapsule = False):
>
> if not self.__IsKeyword("FD"):
> return False
>
> if not self.__IsToken("="):
> @@ -3451,11 +3470,17 @@ class FdfParser:
> if self.__Token.upper() not in self.Profile.FdDict.keys():
> raise Warning("FD name does not exist", self.FileName,
> self.CurrentLineNumber)
>
> CapsuleFd = CapsuleData.CapsuleFd()
> CapsuleFd.FdName = self.__Token
> - CapsuleObj.CapsuleDataList.append(CapsuleFd)
> + if FMPCapsule:
> + if not CapsuleObj.ImageFile:
> + CapsuleObj.ImageFile.append(CapsuleFd)
> + else:
> + CapsuleObj.VendorCodeFile.append(CapsuleFd)
> + else:
> + CapsuleObj.CapsuleDataList.append(CapsuleFd)
> return True
>
> def __GetFmpStatement(self, CapsuleObj):
> if not self.__IsKeyword("FMP_PAYLOAD"):
> if not self.__IsKeyword("FMP"):
> @@ -3502,18 +3527,24 @@ class FdfParser:
> # @param self The object pointer
> # @param CapsuleObj for whom AnyFile is got
> # @retval True Successfully find a Anyfile statement
> # @retval False Not able to find a AnyFile statement
> #
> - def __GetAnyFileStatement(self, CapsuleObj):
> + def __GetAnyFileStatement(self, CapsuleObj, FMPCapsule = False):
> AnyFileName = self.__ParseRawFileStatement()
> if not AnyFileName:
> return False
>
> CapsuleAnyFile = CapsuleData.CapsuleAnyFile()
> CapsuleAnyFile.FileName = AnyFileName
> - CapsuleObj.CapsuleDataList.append(CapsuleAnyFile)
> + if FMPCapsule:
> + if not CapsuleObj.ImageFile:
> + CapsuleObj.ImageFile.append(CapsuleAnyFile)
> + else:
> + CapsuleObj.VendorCodeFile.append(CapsuleAnyFile)
> + else:
> + CapsuleObj.CapsuleDataList.append(CapsuleAnyFile)
> return True
>
> ## __GetAfileStatement() method
> #
> # Get Afile for capsule
> --
> 2.6.1.windows.1
prev parent reply other threads:[~2016-10-10 2:36 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-09 2:24 [Patch] BaseTools: Extend FMP to support FV statement and FD statement Yonghong Zhu
2016-10-10 2:36 ` Gao, Liming [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14B482789@shsmsx102.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox