print ('GenerateCapsule: error:' + str(Msg))\r
sys.exit (1)\r
for SinglePayloadDescriptor in PayloadDescriptorList:\r
+ ImageCapsuleSupport = 0x0000000000000000\r
Result = SinglePayloadDescriptor.Payload\r
try:\r
FmpPayloadHeader.FwVersion = SinglePayloadDescriptor.FwVersion\r
if SinglePayloadDescriptor.UseDependency:\r
CapsuleDependency.Payload = Result\r
CapsuleDependency.DepexExp = SinglePayloadDescriptor.DepexExp\r
+ ImageCapsuleSupport |= FmpCapsuleHeader.CAPSULE_SUPPORT_DEPENDENCY\r
Result = CapsuleDependency.Encode ()\r
if args.Verbose:\r
CapsuleDependency.DumpInfo ()\r
FmpAuthHeader.MonotonicCount = SinglePayloadDescriptor.MonotonicCount\r
FmpAuthHeader.CertData = CertData\r
FmpAuthHeader.Payload = Result\r
+ ImageCapsuleSupport |= FmpCapsuleHeader.CAPSULE_SUPPORT_AUTHENTICATION\r
Result = FmpAuthHeader.Encode ()\r
if args.Verbose:\r
FmpAuthHeader.DumpInfo ()\r
except:\r
print ('GenerateCapsule: error: can not encode FMP Auth Header')\r
sys.exit (1)\r
- FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance = SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex)\r
+ FmpCapsuleHeader.AddPayload (SinglePayloadDescriptor.Guid, Result, HardwareInstance = SinglePayloadDescriptor.HardwareInstance, UpdateImageIndex = SinglePayloadDescriptor.UpdateImageIndex, CapsuleSupport = ImageCapsuleSupport)\r
try:\r
for EmbeddedDriver in EmbeddedDriverDescriptorList:\r
FmpCapsuleHeader.AddEmbeddedDriver(EmbeddedDriver)\r
# /// therefore can be modified without changing the Auth data.\r
# ///\r
# UINT64 UpdateHardwareInstance;\r
+ #\r
+ # ///\r
+ # /// Bits which indicate authentication and depex information for the image that follows this structure\r
+ # ///\r
+ # UINT64 ImageCapsuleSupport\r
# } EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;\r
#\r
- # #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000002\r
+ # #define EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION 0x00000003\r
\r
- _StructFormat = '<I16sB3BIIQ'\r
+ _StructFormat = '<I16sB3BIIQQ'\r
_StructSize = struct.calcsize (_StructFormat)\r
\r
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000002\r
+ EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION = 0x00000003\r
\r
def __init__ (self):\r
self._Valid = False\r
self.UpdateImageSize = 0\r
self.UpdateVendorCodeSize = 0\r
self.UpdateHardwareInstance = 0x0000000000000000\r
+ self.ImageCapsuleSupport = 0x0000000000000000\r
self.Payload = b''\r
self.VendorCodeBytes = b''\r
\r
0,0,0,\r
self.UpdateImageSize,\r
self.UpdateVendorCodeSize,\r
- self.UpdateHardwareInstance\r
+ self.UpdateHardwareInstance,\r
+ self.ImageCapsuleSupport\r
)\r
self._Valid = True\r
return FmpCapsuleImageHeader + self.Payload + self.VendorCodeBytes\r
def Decode (self, Buffer):\r
if len (Buffer) < self._StructSize:\r
raise ValueError\r
- (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize, UpdateHardwareInstance) = \\r
+ (Version, UpdateImageTypeId, UpdateImageIndex, r0, r1, r2, UpdateImageSize, UpdateVendorCodeSize, UpdateHardwareInstance, ImageCapsuleSupport) = \\r
struct.unpack (\r
self._StructFormat,\r
Buffer[0:self._StructSize]\r
self.UpdateImageSize = UpdateImageSize\r
self.UpdateVendorCodeSize = UpdateVendorCodeSize\r
self.UpdateHardwareInstance = UpdateHardwareInstance\r
+ self.ImageCapsuleSupport = ImageCapsuleSupport\r
self.Payload = Buffer[self._StructSize:self._StructSize + UpdateImageSize]\r
self.VendorCodeBytes = Buffer[self._StructSize + UpdateImageSize:]\r
self._Valid = True\r
print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize = {UpdateImageSize:08X}'.format (UpdateImageSize = self.UpdateImageSize))\r
print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize = {UpdateVendorCodeSize:08X}'.format (UpdateVendorCodeSize = self.UpdateVendorCodeSize))\r
print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance = {UpdateHardwareInstance:016X}'.format (UpdateHardwareInstance = self.UpdateHardwareInstance))\r
+ print ('EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport = {ImageCapsuleSupport:016X}'.format (ImageCapsuleSupport = self.ImageCapsuleSupport))\r
print ('sizeof (Payload) = {Size:08X}'.format (Size = len (self.Payload)))\r
print ('sizeof (VendorCodeBytes) = {Size:08X}'.format (Size = len (self.VendorCodeBytes)))\r
\r
_ItemOffsetSize = struct.calcsize (_ItemOffsetFormat)\r
\r
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION = 0x00000001\r
+ CAPSULE_SUPPORT_AUTHENTICATION = 0x0000000000000001\r
+ CAPSULE_SUPPORT_DEPENDENCY = 0x0000000000000002\r
\r
def __init__ (self):\r
self._Valid = False\r
raise ValueError\r
return self._EmbeddedDriverList[Index]\r
\r
- def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex = 1):\r
- self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex))\r
+ def AddPayload (self, UpdateImageTypeId, Payload = b'', VendorCodeBytes = b'', HardwareInstance = 0, UpdateImageIndex = 1, CapsuleSupport = 0):\r
+ self._PayloadList.append ((UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport))\r
\r
def GetFmpCapsuleImageHeader (self, Index):\r
if Index >= len (self._FmpCapsuleImageHeaderList):\r
self._ItemOffsetList.append (Offset)\r
Offset = Offset + len (EmbeddedDriver)\r
Index = 1\r
- for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex) in self._PayloadList:\r
+ for (UpdateImageTypeId, Payload, VendorCodeBytes, HardwareInstance, UpdateImageIndex, CapsuleSupport) in self._PayloadList:\r
FmpCapsuleImageHeader = FmpCapsuleImageHeaderClass ()\r
FmpCapsuleImageHeader.UpdateImageTypeId = UpdateImageTypeId\r
FmpCapsuleImageHeader.UpdateImageIndex = UpdateImageIndex\r
FmpCapsuleImageHeader.Payload = Payload\r
FmpCapsuleImageHeader.VendorCodeBytes = VendorCodeBytes\r
FmpCapsuleImageHeader.UpdateHardwareInstance = HardwareInstance\r
+ FmpCapsuleImageHeader.ImageCapsuleSupport = CapsuleSupport\r
FmpCapsuleImage = FmpCapsuleImageHeader.Encode ()\r
FmpCapsuleData = FmpCapsuleData + FmpCapsuleImage\r
\r