<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">I created the PR <a href="https://github.com/tianocore/edk2/pull/1637">
https://github.com/tianocore/edk2/pull/1637</a> for merge.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Bob<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Kinney, Michael D <michael.d.kinney@intel.com> <br>
<b>Sent:</b> Tuesday, May 11, 2021 11:09 PM<br>
<b>To:</b> Sughosh Ganu <sughosh.ganu@linaro.org>; Feng, Bob C <bob.c.feng@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com><br>
<b>Cc:</b> devel@edk2.groups.io<br>
<b>Subject:</b> RE: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi Sughosh,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks for the reminder.  <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We need to wait for one of the BaseTools maintainers to provide an Rb for the V2 version of this patch, then we will be able to merge.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mike<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Sughosh Ganu <<a href="mailto:sughosh.ganu@linaro.org">sughosh.ganu@linaro.org</a>>
<br>
<b>Sent:</b> Tuesday, May 11, 2021 3:21 AM<br>
<b>To:</b> Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>>; Feng, Bob C <<a href="mailto:bob.c.feng@intel.com">bob.c.feng@intel.com</a>>; Liming Gao <<a href="mailto:gaoliming@byosoft.com.cn">gaoliming@byosoft.com.cn</a>>;
 Chen, Christine <<a href="mailto:yuwei.chen@intel.com">yuwei.chen@intel.com</a>><br>
<b>Cc:</b> <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a><br>
<b>Subject:</b> Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">hi,<o:p></o:p></p>
<div>
<p class="MsoNormal">Can this patch be merged. Thanks.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-sughosh<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Mon, 26 Apr 2021 at 21:27, Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<p class="MsoNormal" style="margin-bottom:12.0pt">Reviewed-by: Michael D Kinney <<a href="mailto:michael.d.kinney@intel.com" target="_blank">michael.d.kinney@intel.com</a>><br>
<br>
Mike<br>
<br>
> -----Original Message-----<br>
> From: <a href="mailto:devel@edk2.groups.io" target="_blank">devel@edk2.groups.io</a> <<a href="mailto:devel@edk2.groups.io" target="_blank">devel@edk2.groups.io</a>> On Behalf Of Sughosh Ganu<br>
> Sent: Friday, April 23, 2021 4:29 AM<br>
> To: <a href="mailto:devel@edk2.groups.io" target="_blank">devel@edk2.groups.io</a><br>
> Cc: Michal Simek <<a href="mailto:michal.simek@xilinx.com" target="_blank">michal.simek@xilinx.com</a>>; Sughosh Ganu <<a href="mailto:sughosh.ganu@linaro.org" target="_blank">sughosh.ganu@linaro.org</a>><br>
> Subject: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure<br>
> <br>
> Add support for the ImageCapsuleSupport field, introduced in version 3<br>
> of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This<br>
> structure member is used to indicate if the corresponding payload has<br>
> support for authentication and dependency.<br>
> <br>
> Signed-off-by: Sughosh Ganu <<a href="mailto:sughosh.ganu@linaro.org" target="_blank">sughosh.ganu@linaro.org</a>><br>
> ---<br>
> <br>
> Changes since v1:<br>
> - Reword the patch header to get rid of the PatchCheck warning<br>
> - Make passing of ImageCapsuleSupport parameter to the AddPayload<br>
>   function as an optional parameter to maintain backward compatibility<br>
> - Declare the values of CAPSULE_SUPPORT_DEPENDENCY and<br>
>   CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use<br>
>   those in the GenerateCapsule script<br>
> <br>
>  .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-<br>
>  .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------<br>
>  2 files changed, 24 insertions(+), 9 deletions(-)<br>
> <br>
> diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py b/BaseTools/Source/Python/Capsule/GenerateCapsule.py<br>
> index a8de988253..b8039db878 100644<br>
> --- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py<br>
> +++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py<br>
> @@ -561,6 +561,7 @@ if __name__ == '__main__':<br>
>                  print ('GenerateCapsule: error:' + str(Msg))<br>
>                  sys.exit (1)<br>
>          for SinglePayloadDescriptor in PayloadDescriptorList:<br>
> +            ImageCapsuleSupport = 0x0000000000000000<br>
>              Result = SinglePayloadDescriptor.Payload<br>
>              try:<br>
>                  FmpPayloadHeader.FwVersion              = SinglePayloadDescriptor.FwVersion<br>
> @@ -575,6 +576,7 @@ if __name__ == '__main__':<br>
>              if SinglePayloadDescriptor.UseDependency:<br>
>                  CapsuleDependency.Payload = Result<br>
>                  CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp<br>
> +                ImageCapsuleSupport        |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY<br>
>                  Result = CapsuleDependency.Encode ()<br>
>                  if args.Verbose:<br>
>                      CapsuleDependency.DumpInfo ()<br>
> @@ -607,13 +609,14 @@ if __name__ == '__main__':<br>
>                      FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount<br>
>                      FmpAuthHeader.CertData       = CertData<br>
>                      FmpAuthHeader.Payload        = Result<br>
> +                    ImageCapsuleSupport          |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION<br>
>                      Result = FmpAuthHeader.Encode ()<br>
>                      if args.Verbose:<br>
>                          FmpAuthHeader.DumpInfo ()<br>
>                  except:<br>
>                      print ('GenerateCapsule: error: can not encode FMP Auth Header')<br>
>                      sys.exit (1)<br>
> -            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =<br>
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)<br>
> +            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =<br>
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport =<br>
> ImageCapsuleSupport)<br>
>          try:<br>
>              for EmbeddedDriver in EmbeddedDriverDescriptorList:<br>
>                  FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)<br>
> diff --git a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py<br>
> b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py<br>
> index 91d24919c4..8abb449c6f 100644<br>
> --- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py<br>
> +++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py<br>
> @@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):<br>
>      #   /// therefore can be modified without changing the Auth data.<br>
>      #   ///<br>
>      #   UINT64   UpdateHardwareInstance;<br>
> +    #<br>
> +    #   ///<br>
> +    #   /// Bits which indicate authentication and depex information for the image that follows this structure<br>
> +    #   ///<br>
> +    #   UINT64   ImageCapsuleSupport<br>
>      # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;<br>
>      #<br>
> -    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002<br>
> +    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003<br>
> <br>
> -    _StructFormat = '<I16sB3BIIQ'<br>
> +    _StructFormat = '<I16sB3BIIQQ'<br>
>      _StructSize   = struct.calcsize (_StructFormat)<br>
> <br>
> -    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002<br>
> +    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003<br>
> <br>
>      def __init__ (self):<br>
>          self._Valid                 = False<br>
> @@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):<br>
>          self.UpdateImageSize        = 0<br>
>          self.UpdateVendorCodeSize   = 0<br>
>          self.UpdateHardwareInstance = 0x0000000000000000<br>
> +        self.ImageCapsuleSupport    = 0x0000000000000000<br>
>          self.Payload                = b''<br>
>          self.VendorCodeBytes        = b''<br>
> <br>
> @@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):<br>
>                                           0,0,0,<br>
>                                           self.UpdateImageSize,<br>
>                                           self.UpdateVendorCodeSize,<br>
> -                                         self.UpdateHardwareInstance<br>
> +                                         self.UpdateHardwareInstance,<br>
> +                                         self.ImageCapsuleSupport<br>
>                                           )<br>
>          self._Valid = True<br>
>          return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes<br>
> @@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):<br>
>      def Decode (self, Buffer):<br>
>          if len (Buffer) < self._StructSize:<br>
>              raise ValueError<br>
> -        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,<br>
> UpdateHardwareInstance) = \<br>
> +        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,<br>
> UpdateHardwareInstance, ImageCapsuleSupport) = \<br>
>              struct.unpack (<br>
>                       self._StructFormat,<br>
>                       Buffer[0:self._StructSize]<br>
> @@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):<br>
>          self.UpdateImageSize        = UpdateImageSize<br>
>          self.UpdateVendorCodeSize   = UpdateVendorCodeSize<br>
>          self.UpdateHardwareInstance = UpdateHardwareInstance<br>
> +        self.ImageCapsuleSupport    = ImageCapsuleSupport<br>
>          self.Payload                = Buffer[self._StructSize:self._StructSize + UpdateImageSize]<br>
>          self.VendorCodeBytes        = Buffer[self._StructSize + UpdateImageSize:]<br>
>          self._Valid                 = True<br>
> @@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):<br>
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = {UpdateImageSize:08X}'.format<br>
> (UpdateImageSize = self.UpdateImageSize))<br>
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = {UpdateVendorCodeSize:08X}'.format<br>
> (UpdateVendorCodeSize = self.UpdateVendorCodeSize))<br>
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance =<br>
> {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))<br>
> +        print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = {ImageCapsuleSupport:016X}'.format<br>
> (ImageCapsuleSupport = self.ImageCapsuleSupport))<br>
>          print ('sizeof (Payload)                                                    = {Size:08X}'.format (Size = len<br>
> (self.Payload)))<br>
>          print ('sizeof (VendorCodeBytes)                                            = {Size:08X}'.format (Size = len<br>
> (self.VendorCodeBytes)))<br>
> <br>
> @@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):<br>
>      _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)<br>
> <br>
>      EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001<br>
> +    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001<br>
> +    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002<br>
> <br>
>      def __init__ (self):<br>
>          self._Valid                     = False<br>
> @@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):<br>
>              raise ValueError<br>
>          return self._EmbeddedDriverList[Index]<br>
> <br>
> -    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex<br>
> = 1):<br>
> -        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))<br>
> +    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex<br>
> = 1, CapsuleSupport = 0):<br>
> +        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex,<br>
> CapsuleSupport))<br>
> <br>
>      def GetFmpCapsuleImageHeader (self, Index):<br>
>          if Index >= len (self._FmpCapsuleImageHeaderList):<br>
> @@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):<br>
>              self._ItemOffsetList.append (Offset)<br>
>              Offset = Offset + len (EmbeddedDriver)<br>
>          Index = 1<br>
> -        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:<br>
> +        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in<br>
> self._PayloadList:<br>
>              FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()<br>
>              FmpCapsuleImageHeader.UpdateImageTypeId      = UpdateImageTypeId<br>
>              FmpCapsuleImageHeader.UpdateImageIndex       = UpdateImageIndex<br>
>              FmpCapsuleImageHeader.Payload                = Payload<br>
>              FmpCapsuleImageHeader.VendorCodeBytes        = VendorCodeBytes<br>
>              FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance<br>
> +            FmpCapsuleImageHeader.ImageCapsuleSupport    = CapsuleSupport<br>
>              FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()<br>
>              FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage<br>
> <br>
> --<br>
> 2.17.1<br>
> <br>
> <br>
> <br>
> <br>
> <o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</body>
</html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr>   Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/75050">View/Reply Online (#75050)</a> |    |  <a target="_blank" href="https://groups.io/mt/82280704/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>