mirror of https://github.com/acidanthera/audk.git
BaseTools: Fix the bug use same FMP_PAYLOAD in different capsule file
Fix the bug that use same FMP_PAYLOAD in different capsule file. Because in previous FMP generation, the FMP already be generated, so we don't need to regenerate again. Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
4a1167dfef
commit
d4c558e83d
|
@ -1,7 +1,7 @@
|
||||||
## @file
|
## @file
|
||||||
# generate capsule
|
# generate capsule
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -141,6 +141,11 @@ class Capsule (CapsuleClassObject) :
|
||||||
Content.write(File.read())
|
Content.write(File.read())
|
||||||
File.close()
|
File.close()
|
||||||
for fmp in self.FmpPayloadList:
|
for fmp in self.FmpPayloadList:
|
||||||
|
if fmp.Existed:
|
||||||
|
FwMgrHdr.write(pack('=Q', PreSize))
|
||||||
|
PreSize += len(fmp.Buffer)
|
||||||
|
Content.write(fmp.Buffer)
|
||||||
|
continue
|
||||||
if fmp.ImageFile:
|
if fmp.ImageFile:
|
||||||
for Obj in fmp.ImageFile:
|
for Obj in fmp.ImageFile:
|
||||||
fmp.ImageFile = Obj.GenCapsuleSubItem()
|
fmp.ImageFile = Obj.GenCapsuleSubItem()
|
||||||
|
@ -169,12 +174,12 @@ class Capsule (CapsuleClassObject) :
|
||||||
dwLength = 4 + 2 + 2 + 16 + 16 + 256 + 256
|
dwLength = 4 + 2 + 2 + 16 + 16 + 256 + 256
|
||||||
fmp.ImageFile = CapOutputTmp
|
fmp.ImageFile = CapOutputTmp
|
||||||
AuthData = [fmp.MonotonicCount, dwLength, WIN_CERT_REVISION, WIN_CERT_TYPE_EFI_GUID, fmp.Certificate_Guid]
|
AuthData = [fmp.MonotonicCount, dwLength, WIN_CERT_REVISION, WIN_CERT_TYPE_EFI_GUID, fmp.Certificate_Guid]
|
||||||
Buffer = fmp.GenCapsuleSubItem(AuthData)
|
fmp.Buffer = fmp.GenCapsuleSubItem(AuthData)
|
||||||
else:
|
else:
|
||||||
Buffer = fmp.GenCapsuleSubItem()
|
fmp.Buffer = fmp.GenCapsuleSubItem()
|
||||||
FwMgrHdr.write(pack('=Q', PreSize))
|
FwMgrHdr.write(pack('=Q', PreSize))
|
||||||
PreSize += len(Buffer)
|
PreSize += len(fmp.Buffer)
|
||||||
Content.write(Buffer)
|
Content.write(fmp.Buffer)
|
||||||
BodySize = len(FwMgrHdr.getvalue()) + len(Content.getvalue())
|
BodySize = len(FwMgrHdr.getvalue()) + len(Content.getvalue())
|
||||||
Header.write(pack('=I', HdrSize + BodySize))
|
Header.write(pack('=I', HdrSize + BodySize))
|
||||||
#
|
#
|
||||||
|
|
|
@ -183,6 +183,8 @@ class CapsulePayload(CapsuleData):
|
||||||
self.VendorCodeFile = []
|
self.VendorCodeFile = []
|
||||||
self.Certificate_Guid = None
|
self.Certificate_Guid = None
|
||||||
self.MonotonicCount = None
|
self.MonotonicCount = None
|
||||||
|
self.Existed = False
|
||||||
|
self.Buffer = None
|
||||||
|
|
||||||
def GenCapsuleSubItem(self, AuthData=[]):
|
def GenCapsuleSubItem(self, AuthData=[]):
|
||||||
if not self.Version:
|
if not self.Version:
|
||||||
|
@ -239,4 +241,5 @@ class CapsulePayload(CapsuleData):
|
||||||
VendorFile = open(self.VendorCodeFile, 'rb')
|
VendorFile = open(self.VendorCodeFile, 'rb')
|
||||||
Buffer += VendorFile.read()
|
Buffer += VendorFile.read()
|
||||||
VendorFile.close()
|
VendorFile.close()
|
||||||
|
self.Existed = True
|
||||||
return Buffer
|
return Buffer
|
||||||
|
|
Loading…
Reference in New Issue