[edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure

Sughosh Ganu posted 1 patch 3 years ago
Failed in applying to current master (apply log)
.../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
.../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
2 files changed, 24 insertions(+), 9 deletions(-)
[edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
Posted by Sughosh Ganu 3 years ago
Add support for the ImageCapsuleSupport field, introduced in version 3
of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This
structure member is used to indicate if the corresponding payload has
support for authentication and dependency.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
---

Changes since v1:
- Reword the patch header to get rid of the PatchCheck warning
- Make passing of ImageCapsuleSupport parameter to the AddPayload
  function as an optional parameter to maintain backward compatibility
- Declare the values of CAPSULE_SUPPORT_DEPENDENCY and
  CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use
  those in the GenerateCapsule script

 .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
 .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
index a8de988253..b8039db878 100644
--- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
+++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
@@ -561,6 +561,7 @@ if __name__ == '__main__':
                 print ('GenerateCapsule: error:' + str(Msg))
                 sys.exit (1)
         for SinglePayloadDescriptor in PayloadDescriptorList:
+            ImageCapsuleSupport = 0x0000000000000000
             Result = SinglePayloadDescriptor.Payload
             try:
                 FmpPayloadHeader.FwVersion              = SinglePayloadDescriptor.FwVersion
@@ -575,6 +576,7 @@ if __name__ == '__main__':
             if SinglePayloadDescriptor.UseDependency:
                 CapsuleDependency.Payload = Result
                 CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp
+                ImageCapsuleSupport        |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY
                 Result = CapsuleDependency.Encode ()
                 if args.Verbose:
                     CapsuleDependency.DumpInfo ()
@@ -607,13 +609,14 @@ if __name__ == '__main__':
                     FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount
                     FmpAuthHeader.CertData       = CertData
                     FmpAuthHeader.Payload        = Result
+                    ImageCapsuleSupport          |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION
                     Result = FmpAuthHeader.Encode ()
                     if args.Verbose:
                         FmpAuthHeader.DumpInfo ()
                 except:
                     print ('GenerateCapsule: error: can not encode FMP Auth Header')
                     sys.exit (1)
-            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance = SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)
+            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance = SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport = ImageCapsuleSupport)
         try:
             for EmbeddedDriver in EmbeddedDriverDescriptorList:
                 FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)
diff --git a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
index 91d24919c4..8abb449c6f 100644
--- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
+++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
@@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):
     #   /// therefore can be modified without changing the Auth data.
     #   ///
     #   UINT64   UpdateHardwareInstance;
+    #
+    #   ///
+    #   /// Bits which indicate authentication and depex information for the image that follows this structure
+    #   ///
+    #   UINT64   ImageCapsuleSupport
     # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
     #
-    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002
+    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003
 
-    _StructFormat = '<I16sB3BIIQ'
+    _StructFormat = '<I16sB3BIIQQ'
     _StructSize   = struct.calcsize (_StructFormat)
 
-    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002
+    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003
 
     def __init__ (self):
         self._Valid                 = False
@@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):
         self.UpdateImageSize        = 0
         self.UpdateVendorCodeSize   = 0
         self.UpdateHardwareInstance = 0x0000000000000000
+        self.ImageCapsuleSupport    = 0x0000000000000000
         self.Payload                = b''
         self.VendorCodeBytes        = b''
 
@@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):
                                          0,0,0,
                                          self.UpdateImageSize,
                                          self.UpdateVendorCodeSize,
-                                         self.UpdateHardwareInstance
+                                         self.UpdateHardwareInstance,
+                                         self.ImageCapsuleSupport
                                          )
         self._Valid = True
         return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes
@@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):
     def Decode (self, Buffer):
         if len (Buffer) < self._StructSize:
             raise ValueError
-        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize, UpdateHardwareInstance) = \
+        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize, UpdateHardwareInstance, ImageCapsuleSupport) = \
             struct.unpack (
                      self._StructFormat,
                      Buffer[0:self._StructSize]
@@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):
         self.UpdateImageSize        = UpdateImageSize
         self.UpdateVendorCodeSize   = UpdateVendorCodeSize
         self.UpdateHardwareInstance = UpdateHardwareInstance
+        self.ImageCapsuleSupport    = ImageCapsuleSupport
         self.Payload                = Buffer[self._StructSize:self._StructSize + UpdateImageSize]
         self.VendorCodeBytes        = Buffer[self._StructSize + UpdateImageSize:]
         self._Valid                 = True
@@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):
         print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = {UpdateImageSize:08X}'.format (UpdateImageSize = self.UpdateImageSize))
         print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = {UpdateVendorCodeSize:08X}'.format (UpdateVendorCodeSize = self.UpdateVendorCodeSize))
         print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance = {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))
+        print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = {ImageCapsuleSupport:016X}'.format (ImageCapsuleSupport = self.ImageCapsuleSupport))
         print ('sizeof (Payload)                                                    = {Size:08X}'.format (Size = len (self.Payload)))
         print ('sizeof (VendorCodeBytes)                                            = {Size:08X}'.format (Size = len (self.VendorCodeBytes)))
 
@@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):
     _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)
 
     EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001
+    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001
+    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002
 
     def __init__ (self):
         self._Valid                     = False
@@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):
             raise ValueError
         return self._EmbeddedDriverList[Index]
 
-    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex = 1):
-        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))
+    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex = 1, CapsuleSupport = 0):
+        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport))
 
     def GetFmpCapsuleImageHeader (self, Index):
         if Index >= len (self._FmpCapsuleImageHeaderList):
@@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):
             self._ItemOffsetList.append (Offset)
             Offset = Offset + len (EmbeddedDriver)
         Index = 1
-        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:
+        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in self._PayloadList:
             FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()
             FmpCapsuleImageHeader.UpdateImageTypeId      = UpdateImageTypeId
             FmpCapsuleImageHeader.UpdateImageIndex       = UpdateImageIndex
             FmpCapsuleImageHeader.Payload                = Payload
             FmpCapsuleImageHeader.VendorCodeBytes        = VendorCodeBytes
             FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance
+            FmpCapsuleImageHeader.ImageCapsuleSupport    = CapsuleSupport
             FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()
             FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage
 
-- 
2.17.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#74390): https://edk2.groups.io/g/devel/message/74390
Mute This Topic: https://groups.io/mt/82280704/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
Posted by Michael D Kinney 3 years ago
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>

Mike

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sughosh Ganu
> Sent: Friday, April 23, 2021 4:29 AM
> To: devel@edk2.groups.io
> Cc: Michal Simek <michal.simek@xilinx.com>; Sughosh Ganu <sughosh.ganu@linaro.org>
> Subject: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
> 
> Add support for the ImageCapsuleSupport field, introduced in version 3
> of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This
> structure member is used to indicate if the corresponding payload has
> support for authentication and dependency.
> 
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> ---
> 
> Changes since v1:
> - Reword the patch header to get rid of the PatchCheck warning
> - Make passing of ImageCapsuleSupport parameter to the AddPayload
>   function as an optional parameter to maintain backward compatibility
> - Declare the values of CAPSULE_SUPPORT_DEPENDENCY and
>   CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use
>   those in the GenerateCapsule script
> 
>  .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
>  .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
>  2 files changed, 24 insertions(+), 9 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> index a8de988253..b8039db878 100644
> --- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> +++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> @@ -561,6 +561,7 @@ if __name__ == '__main__':
>                  print ('GenerateCapsule: error:' + str(Msg))
>                  sys.exit (1)
>          for SinglePayloadDescriptor in PayloadDescriptorList:
> +            ImageCapsuleSupport = 0x0000000000000000
>              Result = SinglePayloadDescriptor.Payload
>              try:
>                  FmpPayloadHeader.FwVersion              = SinglePayloadDescriptor.FwVersion
> @@ -575,6 +576,7 @@ if __name__ == '__main__':
>              if SinglePayloadDescriptor.UseDependency:
>                  CapsuleDependency.Payload = Result
>                  CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp
> +                ImageCapsuleSupport        |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY
>                  Result = CapsuleDependency.Encode ()
>                  if args.Verbose:
>                      CapsuleDependency.DumpInfo ()
> @@ -607,13 +609,14 @@ if __name__ == '__main__':
>                      FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount
>                      FmpAuthHeader.CertData       = CertData
>                      FmpAuthHeader.Payload        = Result
> +                    ImageCapsuleSupport          |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION
>                      Result = FmpAuthHeader.Encode ()
>                      if args.Verbose:
>                          FmpAuthHeader.DumpInfo ()
>                  except:
>                      print ('GenerateCapsule: error: can not encode FMP Auth Header')
>                      sys.exit (1)
> -            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)
> +            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport =
> ImageCapsuleSupport)
>          try:
>              for EmbeddedDriver in EmbeddedDriverDescriptorList:
>                  FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)
> diff --git a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> index 91d24919c4..8abb449c6f 100644
> --- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> +++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> @@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):
>      #   /// therefore can be modified without changing the Auth data.
>      #   ///
>      #   UINT64   UpdateHardwareInstance;
> +    #
> +    #   ///
> +    #   /// Bits which indicate authentication and depex information for the image that follows this structure
> +    #   ///
> +    #   UINT64   ImageCapsuleSupport
>      # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
>      #
> -    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002
> +    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003
> 
> -    _StructFormat = '<I16sB3BIIQ'
> +    _StructFormat = '<I16sB3BIIQQ'
>      _StructSize   = struct.calcsize (_StructFormat)
> 
> -    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002
> +    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003
> 
>      def __init__ (self):
>          self._Valid                 = False
> @@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = 0
>          self.UpdateVendorCodeSize   = 0
>          self.UpdateHardwareInstance = 0x0000000000000000
> +        self.ImageCapsuleSupport    = 0x0000000000000000
>          self.Payload                = b''
>          self.VendorCodeBytes        = b''
> 
> @@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):
>                                           0,0,0,
>                                           self.UpdateImageSize,
>                                           self.UpdateVendorCodeSize,
> -                                         self.UpdateHardwareInstance
> +                                         self.UpdateHardwareInstance,
> +                                         self.ImageCapsuleSupport
>                                           )
>          self._Valid = True
>          return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes
> @@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):
>      def Decode (self, Buffer):
>          if len (Buffer) < self._StructSize:
>              raise ValueError
> -        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance) = \
> +        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance, ImageCapsuleSupport) = \
>              struct.unpack (
>                       self._StructFormat,
>                       Buffer[0:self._StructSize]
> @@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = UpdateImageSize
>          self.UpdateVendorCodeSize   = UpdateVendorCodeSize
>          self.UpdateHardwareInstance = UpdateHardwareInstance
> +        self.ImageCapsuleSupport    = ImageCapsuleSupport
>          self.Payload                = Buffer[self._StructSize:self._StructSize + UpdateImageSize]
>          self.VendorCodeBytes        = Buffer[self._StructSize + UpdateImageSize:]
>          self._Valid                 = True
> @@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = {UpdateImageSize:08X}'.format
> (UpdateImageSize = self.UpdateImageSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = {UpdateVendorCodeSize:08X}'.format
> (UpdateVendorCodeSize = self.UpdateVendorCodeSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance =
> {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))
> +        print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = {ImageCapsuleSupport:016X}'.format
> (ImageCapsuleSupport = self.ImageCapsuleSupport))
>          print ('sizeof (Payload)                                                    = {Size:08X}'.format (Size = len
> (self.Payload)))
>          print ('sizeof (VendorCodeBytes)                                            = {Size:08X}'.format (Size = len
> (self.VendorCodeBytes)))
> 
> @@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):
>      _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)
> 
>      EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001
> +    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001
> +    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002
> 
>      def __init__ (self):
>          self._Valid                     = False
> @@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):
>              raise ValueError
>          return self._EmbeddedDriverList[Index]
> 
> -    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1):
> -        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))
> +    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1, CapsuleSupport = 0):
> +        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex,
> CapsuleSupport))
> 
>      def GetFmpCapsuleImageHeader (self, Index):
>          if Index >= len (self._FmpCapsuleImageHeaderList):
> @@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):
>              self._ItemOffsetList.append (Offset)
>              Offset = Offset + len (EmbeddedDriver)
>          Index = 1
> -        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:
> +        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in
> self._PayloadList:
>              FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()
>              FmpCapsuleImageHeader.UpdateImageTypeId      = UpdateImageTypeId
>              FmpCapsuleImageHeader.UpdateImageIndex       = UpdateImageIndex
>              FmpCapsuleImageHeader.Payload                = Payload
>              FmpCapsuleImageHeader.VendorCodeBytes        = VendorCodeBytes
>              FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance
> +            FmpCapsuleImageHeader.ImageCapsuleSupport    = CapsuleSupport
>              FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()
>              FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage
> 
> --
> 2.17.1
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#74423): https://edk2.groups.io/g/devel/message/74423
Mute This Topic: https://groups.io/mt/82280704/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
Posted by Sughosh Ganu 2 years, 11 months ago
hi,
Can this patch be merged. Thanks.

-sughosh

On Mon, 26 Apr 2021 at 21:27, Kinney, Michael D <michael.d.kinney@intel.com>
wrote:

> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
>
> Mike
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sughosh
> Ganu
> > Sent: Friday, April 23, 2021 4:29 AM
> > To: devel@edk2.groups.io
> > Cc: Michal Simek <michal.simek@xilinx.com>; Sughosh Ganu <
> sughosh.ganu@linaro.org>
> > Subject: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of
> FMP Image Header structure
> >
> > Add support for the ImageCapsuleSupport field, introduced in version 3
> > of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This
> > structure member is used to indicate if the corresponding payload has
> > support for authentication and dependency.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> > ---
> >
> > Changes since v1:
> > - Reword the patch header to get rid of the PatchCheck warning
> > - Make passing of ImageCapsuleSupport parameter to the AddPayload
> >   function as an optional parameter to maintain backward compatibility
> > - Declare the values of CAPSULE_SUPPORT_DEPENDENCY and
> >   CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use
> >   those in the GenerateCapsule script
> >
> >  .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
> >  .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
> >  2 files changed, 24 insertions(+), 9 deletions(-)
> >
> > diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> > index a8de988253..b8039db878 100644
> > --- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> > +++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> > @@ -561,6 +561,7 @@ if __name__ == '__main__':
> >                  print ('GenerateCapsule: error:' + str(Msg))
> >                  sys.exit (1)
> >          for SinglePayloadDescriptor in PayloadDescriptorList:
> > +            ImageCapsuleSupport = 0x0000000000000000
> >              Result = SinglePayloadDescriptor.Payload
> >              try:
> >                  FmpPayloadHeader.FwVersion              =
> SinglePayloadDescriptor.FwVersion
> > @@ -575,6 +576,7 @@ if __name__ == '__main__':
> >              if SinglePayloadDescriptor.UseDependency:
> >                  CapsuleDependency.Payload = Result
> >                  CapsuleDependency.DepexExp =
> SinglePayloadDescriptor.DepexExp
> > +                ImageCapsuleSupport        |=
> FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY
> >                  Result = CapsuleDependency.Encode ()
> >                  if args.Verbose:
> >                      CapsuleDependency.DumpInfo ()
> > @@ -607,13 +609,14 @@ if __name__ == '__main__':
> >                      FmpAuthHeader.MonotonicCount =
> SinglePayloadDescriptor.MonotonicCount
> >                      FmpAuthHeader.CertData       = CertData
> >                      FmpAuthHeader.Payload        = Result
> > +                    ImageCapsuleSupport          |=
> FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION
> >                      Result = FmpAuthHeader.Encode ()
> >                      if args.Verbose:
> >                          FmpAuthHeader.DumpInfo ()
> >                  except:
> >                      print ('GenerateCapsule: error: can not encode FMP
> Auth Header')
> >                      sys.exit (1)
> > -            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid,
> Result, HardwareInstance =
> > SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex =
> SinglePayloadDescriptor.UpdateImageIndex)
> > +            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid,
> Result, HardwareInstance =
> > SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex =
> SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport =
> > ImageCapsuleSupport)
> >          try:
> >              for EmbeddedDriver in EmbeddedDriverDescriptorList:
> >                  FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)
> > diff --git
> a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> > b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> > index 91d24919c4..8abb449c6f 100644
> > --- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> > +++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> > @@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):
> >      #   /// therefore can be modified without changing the Auth data.
> >      #   ///
> >      #   UINT64   UpdateHardwareInstance;
> > +    #
> > +    #   ///
> > +    #   /// Bits which indicate authentication and depex information
> for the image that follows this structure
> > +    #   ///
> > +    #   UINT64   ImageCapsuleSupport
> >      # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
> >      #
> > -    #  #define
> EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002
> > +    #  #define
> EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003
> >
> > -    _StructFormat = '<I16sB3BIIQ'
> > +    _StructFormat = '<I16sB3BIIQQ'
> >      _StructSize   = struct.calcsize (_StructFormat)
> >
> > -    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION =
> 0x00000002
> > +    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION =
> 0x00000003
> >
> >      def __init__ (self):
> >          self._Valid                 = False
> > @@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):
> >          self.UpdateImageSize        = 0
> >          self.UpdateVendorCodeSize   = 0
> >          self.UpdateHardwareInstance = 0x0000000000000000
> > +        self.ImageCapsuleSupport    = 0x0000000000000000
> >          self.Payload                = b''
> >          self.VendorCodeBytes        = b''
> >
> > @@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):
> >                                           0,0,0,
> >                                           self.UpdateImageSize,
> >                                           self.UpdateVendorCodeSize,
> > -                                         self.UpdateHardwareInstance
> > +                                         self.UpdateHardwareInstance,
> > +                                         self.ImageCapsuleSupport
> >                                           )
> >          self._Valid = True
> >          return FmpCapsuleImageHeader + self.Payload +
> self.VendorCodeBytes
> > @@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):
> >      def Decode (self, Buffer):
> >          if len (Buffer) < self._StructSize:
> >              raise ValueError
> > -        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2,
> UpdateImageSize, UpdateVendorCodeSize,
> > UpdateHardwareInstance) = \
> > +        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2,
> UpdateImageSize, UpdateVendorCodeSize,
> > UpdateHardwareInstance, ImageCapsuleSupport) = \
> >              struct.unpack (
> >                       self._StructFormat,
> >                       Buffer[0:self._StructSize]
> > @@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):
> >          self.UpdateImageSize        = UpdateImageSize
> >          self.UpdateVendorCodeSize   = UpdateVendorCodeSize
> >          self.UpdateHardwareInstance = UpdateHardwareInstance
> > +        self.ImageCapsuleSupport    = ImageCapsuleSupport
> >          self.Payload                =
> Buffer[self._StructSize:self._StructSize + UpdateImageSize]
> >          self.VendorCodeBytes        = Buffer[self._StructSize +
> UpdateImageSize:]
> >          self._Valid                 = True
> > @@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):
> >          print
> ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        =
> {UpdateImageSize:08X}'.format
> > (UpdateImageSize = self.UpdateImageSize))
> >          print
> ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   =
> {UpdateVendorCodeSize:08X}'.format
> > (UpdateVendorCodeSize = self.UpdateVendorCodeSize))
> >          print
> ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance =
> > {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance =
> self.UpdateHardwareInstance))
> > +        print
> ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    =
> {ImageCapsuleSupport:016X}'.format
> > (ImageCapsuleSupport = self.ImageCapsuleSupport))
> >          print ('sizeof (Payload)
>             = {Size:08X}'.format (Size = len
> > (self.Payload)))
> >          print ('sizeof (VendorCodeBytes)
>             = {Size:08X}'.format (Size = len
> > (self.VendorCodeBytes)))
> >
> > @@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):
> >      _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)
> >
> >      EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001
> > +    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001
> > +    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002
> >
> >      def __init__ (self):
> >          self._Valid                     = False
> > @@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):
> >              raise ValueError
> >          return self._EmbeddedDriverList[Index]
> >
> > -    def AddPayload (self, UpdateImageTypeId, Payload = b'',
> VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> > = 1):
> > -        self._PayloadList.append ((UpdateImageTypeId, Payload,
> VendorCodeBytes, HardwareInstance, UpdateImageIndex))
> > +    def AddPayload (self, UpdateImageTypeId, Payload = b'',
> VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> > = 1, CapsuleSupport = 0):
> > +        self._PayloadList.append ((UpdateImageTypeId, Payload,
> VendorCodeBytes, HardwareInstance, UpdateImageIndex,
> > CapsuleSupport))
> >
> >      def GetFmpCapsuleImageHeader (self, Index):
> >          if Index >= len (self._FmpCapsuleImageHeaderList):
> > @@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):
> >              self._ItemOffsetList.append (Offset)
> >              Offset = Offset + len (EmbeddedDriver)
> >          Index = 1
> > -        for (UpdateImageTypeId, Payload, VendorCodeBytes,
> HardwareInstance, UpdateImageIndex) in self._PayloadList:
> > +        for (UpdateImageTypeId, Payload, VendorCodeBytes,
> HardwareInstance, UpdateImageIndex, CapsuleSupport) in
> > self._PayloadList:
> >              FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()
> >              FmpCapsuleImageHeader.UpdateImageTypeId      =
> UpdateImageTypeId
> >              FmpCapsuleImageHeader.UpdateImageIndex       =
> UpdateImageIndex
> >              FmpCapsuleImageHeader.Payload                = Payload
> >              FmpCapsuleImageHeader.VendorCodeBytes        =
> VendorCodeBytes
> >              FmpCapsuleImageHeader.UpdateHardwareInstance =
> HardwareInstance
> > +            FmpCapsuleImageHeader.ImageCapsuleSupport    =
> CapsuleSupport
> >              FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()
> >              FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage
> >
> > --
> > 2.17.1
> >
> >
> >
> > 
> >
>
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#74998): https://edk2.groups.io/g/devel/message/74998
Mute This Topic: https://groups.io/mt/82280704/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
Posted by Michael D Kinney 2 years, 11 months ago
Hi Sughosh,

Thanks for the reminder.

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.

Thanks,

Mike

From: Sughosh Ganu <sughosh.ganu@linaro.org>
Sent: Tuesday, May 11, 2021 3:21 AM
To: Kinney, Michael D <michael.d.kinney@intel.com>; Feng, Bob C <bob.c.feng@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>
Cc: devel@edk2.groups.io
Subject: Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure

hi,
Can this patch be merged. Thanks.

-sughosh

On Mon, 26 Apr 2021 at 21:27, Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>> wrote:
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>

Mike

> -----Original Message-----
> From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Sughosh Ganu
> Sent: Friday, April 23, 2021 4:29 AM
> To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
> Cc: Michal Simek <michal.simek@xilinx.com<mailto:michal.simek@xilinx.com>>; Sughosh Ganu <sughosh.ganu@linaro.org<mailto:sughosh.ganu@linaro.org>>
> Subject: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
>
> Add support for the ImageCapsuleSupport field, introduced in version 3
> of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This
> structure member is used to indicate if the corresponding payload has
> support for authentication and dependency.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org<mailto:sughosh.ganu@linaro.org>>
> ---
>
> Changes since v1:
> - Reword the patch header to get rid of the PatchCheck warning
> - Make passing of ImageCapsuleSupport parameter to the AddPayload
>   function as an optional parameter to maintain backward compatibility
> - Declare the values of CAPSULE_SUPPORT_DEPENDENCY and
>   CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use
>   those in the GenerateCapsule script
>
>  .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
>  .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
>  2 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> index a8de988253..b8039db878 100644
> --- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> +++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> @@ -561,6 +561,7 @@ if __name__ == '__main__':
>                  print ('GenerateCapsule: error:' + str(Msg))
>                  sys.exit (1)
>          for SinglePayloadDescriptor in PayloadDescriptorList:
> +            ImageCapsuleSupport = 0x0000000000000000
>              Result = SinglePayloadDescriptor.Payload
>              try:
>                  FmpPayloadHeader.FwVersion              = SinglePayloadDescriptor.FwVersion
> @@ -575,6 +576,7 @@ if __name__ == '__main__':
>              if SinglePayloadDescriptor.UseDependency:
>                  CapsuleDependency.Payload = Result
>                  CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp
> +                ImageCapsuleSupport        |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY
>                  Result = CapsuleDependency.Encode ()
>                  if args.Verbose:
>                      CapsuleDependency.DumpInfo ()
> @@ -607,13 +609,14 @@ if __name__ == '__main__':
>                      FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount
>                      FmpAuthHeader.CertData       = CertData
>                      FmpAuthHeader.Payload        = Result
> +                    ImageCapsuleSupport          |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION
>                      Result = FmpAuthHeader.Encode ()
>                      if args.Verbose:
>                          FmpAuthHeader.DumpInfo ()
>                  except:
>                      print ('GenerateCapsule: error: can not encode FMP Auth Header')
>                      sys.exit (1)
> -            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)
> +            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport =
> ImageCapsuleSupport)
>          try:
>              for EmbeddedDriver in EmbeddedDriverDescriptorList:
>                  FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)
> diff --git a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> index 91d24919c4..8abb449c6f 100644
> --- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> +++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> @@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):
>      #   /// therefore can be modified without changing the Auth data.
>      #   ///
>      #   UINT64   UpdateHardwareInstance;
> +    #
> +    #   ///
> +    #   /// Bits which indicate authentication and depex information for the image that follows this structure
> +    #   ///
> +    #   UINT64   ImageCapsuleSupport
>      # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
>      #
> -    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002
> +    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003
>
> -    _StructFormat = '<I16sB3BIIQ'
> +    _StructFormat = '<I16sB3BIIQQ'
>      _StructSize   = struct.calcsize (_StructFormat)
>
> -    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002
> +    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003
>
>      def __init__ (self):
>          self._Valid                 = False
> @@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = 0
>          self.UpdateVendorCodeSize   = 0
>          self.UpdateHardwareInstance = 0x0000000000000000
> +        self.ImageCapsuleSupport    = 0x0000000000000000
>          self.Payload                = b''
>          self.VendorCodeBytes        = b''
>
> @@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):
>                                           0,0,0,
>                                           self.UpdateImageSize,
>                                           self.UpdateVendorCodeSize,
> -                                         self.UpdateHardwareInstance
> +                                         self.UpdateHardwareInstance,
> +                                         self.ImageCapsuleSupport
>                                           )
>          self._Valid = True
>          return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes
> @@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):
>      def Decode (self, Buffer):
>          if len (Buffer) < self._StructSize:
>              raise ValueError
> -        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance) = \
> +        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance, ImageCapsuleSupport) = \
>              struct.unpack (
>                       self._StructFormat,
>                       Buffer[0:self._StructSize]
> @@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = UpdateImageSize
>          self.UpdateVendorCodeSize   = UpdateVendorCodeSize
>          self.UpdateHardwareInstance = UpdateHardwareInstance
> +        self.ImageCapsuleSupport    = ImageCapsuleSupport
>          self.Payload                = Buffer[self._StructSize:self._StructSize + UpdateImageSize]
>          self.VendorCodeBytes        = Buffer[self._StructSize + UpdateImageSize:]
>          self._Valid                 = True
> @@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = {UpdateImageSize:08X}'.format
> (UpdateImageSize = self.UpdateImageSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = {UpdateVendorCodeSize:08X}'.format
> (UpdateVendorCodeSize = self.UpdateVendorCodeSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance =
> {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))
> +        print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = {ImageCapsuleSupport:016X}'.format
> (ImageCapsuleSupport = self.ImageCapsuleSupport))
>          print ('sizeof (Payload)                                                    = {Size:08X}'.format (Size = len
> (self.Payload)))
>          print ('sizeof (VendorCodeBytes)                                            = {Size:08X}'.format (Size = len
> (self.VendorCodeBytes)))
>
> @@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):
>      _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)
>
>      EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001
> +    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001
> +    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002
>
>      def __init__ (self):
>          self._Valid                     = False
> @@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):
>              raise ValueError
>          return self._EmbeddedDriverList[Index]
>
> -    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1):
> -        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))
> +    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1, CapsuleSupport = 0):
> +        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex,
> CapsuleSupport))
>
>      def GetFmpCapsuleImageHeader (self, Index):
>          if Index >= len (self._FmpCapsuleImageHeaderList):
> @@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):
>              self._ItemOffsetList.append (Offset)
>              Offset = Offset + len (EmbeddedDriver)
>          Index = 1
> -        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:
> +        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in
> self._PayloadList:
>              FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()
>              FmpCapsuleImageHeader.UpdateImageTypeId      = UpdateImageTypeId
>              FmpCapsuleImageHeader.UpdateImageIndex       = UpdateImageIndex
>              FmpCapsuleImageHeader.Payload                = Payload
>              FmpCapsuleImageHeader.VendorCodeBytes        = VendorCodeBytes
>              FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance
> +            FmpCapsuleImageHeader.ImageCapsuleSupport    = CapsuleSupport
>              FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()
>              FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage
>
> --
> 2.17.1
>
>
>
> 
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#75014): https://edk2.groups.io/g/devel/message/75014
Mute This Topic: https://groups.io/mt/82280704/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
Posted by Bob Feng 2 years, 11 months ago
I created the PR https://github.com/tianocore/edk2/pull/1637 for merge.

Thanks,
Bob

From: Kinney, Michael D <michael.d.kinney@intel.com>
Sent: Tuesday, May 11, 2021 11:09 PM
To: 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>
Cc: devel@edk2.groups.io
Subject: RE: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure

Hi Sughosh,

Thanks for the reminder.

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.

Thanks,

Mike

From: Sughosh Ganu <sughosh.ganu@linaro.org<mailto:sughosh.ganu@linaro.org>>
Sent: Tuesday, May 11, 2021 3:21 AM
To: Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>; Feng, Bob C <bob.c.feng@intel.com<mailto:bob.c.feng@intel.com>>; Liming Gao <gaoliming@byosoft.com.cn<mailto:gaoliming@byosoft.com.cn>>; Chen, Christine <yuwei.chen@intel.com<mailto:yuwei.chen@intel.com>>
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Subject: Re: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure

hi,
Can this patch be merged. Thanks.

-sughosh

On Mon, 26 Apr 2021 at 21:27, Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>> wrote:
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>

Mike

> -----Original Message-----
> From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>> On Behalf Of Sughosh Ganu
> Sent: Friday, April 23, 2021 4:29 AM
> To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
> Cc: Michal Simek <michal.simek@xilinx.com<mailto:michal.simek@xilinx.com>>; Sughosh Ganu <sughosh.ganu@linaro.org<mailto:sughosh.ganu@linaro.org>>
> Subject: [edk2-devel] [PATCH v2] BaseTools: Add support for version 3 of FMP Image Header structure
>
> Add support for the ImageCapsuleSupport field, introduced in version 3
> of the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER structure. This
> structure member is used to indicate if the corresponding payload has
> support for authentication and dependency.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org<mailto:sughosh.ganu@linaro.org>>
> ---
>
> Changes since v1:
> - Reword the patch header to get rid of the PatchCheck warning
> - Make passing of ImageCapsuleSupport parameter to the AddPayload
>   function as an optional parameter to maintain backward compatibility
> - Declare the values of CAPSULE_SUPPORT_DEPENDENCY and
>   CAPSULE_SUPPORT_AUTHENTICATION in the FmpCapsuleHeaderClass and use
>   those in the GenerateCapsule script
>
>  .../Source/Python/Capsule/GenerateCapsule.py  |  5 +++-
>  .../Common/Uefi/Capsule/FmpCapsuleHeader.py   | 28 +++++++++++++------
>  2 files changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/BaseTools/Source/Python/Capsule/GenerateCapsule.py b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> index a8de988253..b8039db878 100644
> --- a/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> +++ b/BaseTools/Source/Python/Capsule/GenerateCapsule.py
> @@ -561,6 +561,7 @@ if __name__ == '__main__':
>                  print ('GenerateCapsule: error:' + str(Msg))
>                  sys.exit (1)
>          for SinglePayloadDescriptor in PayloadDescriptorList:
> +            ImageCapsuleSupport = 0x0000000000000000
>              Result = SinglePayloadDescriptor.Payload
>              try:
>                  FmpPayloadHeader.FwVersion              = SinglePayloadDescriptor.FwVersion
> @@ -575,6 +576,7 @@ if __name__ == '__main__':
>              if SinglePayloadDescriptor.UseDependency:
>                  CapsuleDependency.Payload = Result
>                  CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp
> +                ImageCapsuleSupport        |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY
>                  Result = CapsuleDependency.Encode ()
>                  if args.Verbose:
>                      CapsuleDependency.DumpInfo ()
> @@ -607,13 +609,14 @@ if __name__ == '__main__':
>                      FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount
>                      FmpAuthHeader.CertData       = CertData
>                      FmpAuthHeader.Payload        = Result
> +                    ImageCapsuleSupport          |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION
>                      Result = FmpAuthHeader.Encode ()
>                      if args.Verbose:
>                          FmpAuthHeader.DumpInfo ()
>                  except:
>                      print ('GenerateCapsule: error: can not encode FMP Auth Header')
>                      sys.exit (1)
> -            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)
> +            FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance =
> SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport =
> ImageCapsuleSupport)
>          try:
>              for EmbeddedDriver in EmbeddedDriverDescriptorList:
>                  FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)
> diff --git a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> index 91d24919c4..8abb449c6f 100644
> --- a/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> +++ b/BaseTools/Source/Python/Common/Uefi/Capsule/FmpCapsuleHeader.py
> @@ -47,14 +47,19 @@ class FmpCapsuleImageHeaderClass (object):
>      #   /// therefore can be modified without changing the Auth data.
>      #   ///
>      #   UINT64   UpdateHardwareInstance;
> +    #
> +    #   ///
> +    #   /// Bits which indicate authentication and depex information for the image that follows this structure
> +    #   ///
> +    #   UINT64   ImageCapsuleSupport
>      # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
>      #
> -    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002
> +    #  #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003
>
> -    _StructFormat = '<I16sB3BIIQ'
> +    _StructFormat = '<I16sB3BIIQQ'
>      _StructSize   = struct.calcsize (_StructFormat)
>
> -    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002
> +    EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003
>
>      def __init__ (self):
>          self._Valid                 = False
> @@ -64,6 +69,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = 0
>          self.UpdateVendorCodeSize   = 0
>          self.UpdateHardwareInstance = 0x0000000000000000
> +        self.ImageCapsuleSupport    = 0x0000000000000000
>          self.Payload                = b''
>          self.VendorCodeBytes        = b''
>
> @@ -78,7 +84,8 @@ class FmpCapsuleImageHeaderClass (object):
>                                           0,0,0,
>                                           self.UpdateImageSize,
>                                           self.UpdateVendorCodeSize,
> -                                         self.UpdateHardwareInstance
> +                                         self.UpdateHardwareInstance,
> +                                         self.ImageCapsuleSupport
>                                           )
>          self._Valid = True
>          return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes
> @@ -86,7 +93,7 @@ class FmpCapsuleImageHeaderClass (object):
>      def Decode (self, Buffer):
>          if len (Buffer) < self._StructSize:
>              raise ValueError
> -        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance) = \
> +        (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize,
> UpdateHardwareInstance, ImageCapsuleSupport) = \
>              struct.unpack (
>                       self._StructFormat,
>                       Buffer[0:self._StructSize]
> @@ -105,6 +112,7 @@ class FmpCapsuleImageHeaderClass (object):
>          self.UpdateImageSize        = UpdateImageSize
>          self.UpdateVendorCodeSize   = UpdateVendorCodeSize
>          self.UpdateHardwareInstance = UpdateHardwareInstance
> +        self.ImageCapsuleSupport    = ImageCapsuleSupport
>          self.Payload                = Buffer[self._StructSize:self._StructSize + UpdateImageSize]
>          self.VendorCodeBytes        = Buffer[self._StructSize + UpdateImageSize:]
>          self._Valid                 = True
> @@ -119,6 +127,7 @@ class FmpCapsuleImageHeaderClass (object):
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = {UpdateImageSize:08X}'.format
> (UpdateImageSize = self.UpdateImageSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = {UpdateVendorCodeSize:08X}'.format
> (UpdateVendorCodeSize = self.UpdateVendorCodeSize))
>          print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance =
> {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))
> +        print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = {ImageCapsuleSupport:016X}'.format
> (ImageCapsuleSupport = self.ImageCapsuleSupport))
>          print ('sizeof (Payload)                                                    = {Size:08X}'.format (Size = len
> (self.Payload)))
>          print ('sizeof (VendorCodeBytes)                                            = {Size:08X}'.format (Size = len
> (self.VendorCodeBytes)))
>
> @@ -153,6 +162,8 @@ class FmpCapsuleHeaderClass (object):
>      _ItemOffsetSize   = struct.calcsize (_ItemOffsetFormat)
>
>      EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001
> +    CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001
> +    CAPSULE_SUPPORT_DEPENDENCY     = 0x0000000000000002
>
>      def __init__ (self):
>          self._Valid                     = False
> @@ -172,8 +183,8 @@ class FmpCapsuleHeaderClass (object):
>              raise ValueError
>          return self._EmbeddedDriverList[Index]
>
> -    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1):
> -        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))
> +    def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex
> = 1, CapsuleSupport = 0):
> +        self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex,
> CapsuleSupport))
>
>      def GetFmpCapsuleImageHeader (self, Index):
>          if Index >= len (self._FmpCapsuleImageHeaderList):
> @@ -198,13 +209,14 @@ class FmpCapsuleHeaderClass (object):
>              self._ItemOffsetList.append (Offset)
>              Offset = Offset + len (EmbeddedDriver)
>          Index = 1
> -        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:
> +        for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in
> self._PayloadList:
>              FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()
>              FmpCapsuleImageHeader.UpdateImageTypeId      = UpdateImageTypeId
>              FmpCapsuleImageHeader.UpdateImageIndex       = UpdateImageIndex
>              FmpCapsuleImageHeader.Payload                = Payload
>              FmpCapsuleImageHeader.VendorCodeBytes        = VendorCodeBytes
>              FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance
> +            FmpCapsuleImageHeader.ImageCapsuleSupport    = CapsuleSupport
>              FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()
>              FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage
>
> --
> 2.17.1
>
>
>
> 
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#75050): https://edk2.groups.io/g/devel/message/75050
Mute This Topic: https://groups.io/mt/82280704/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-