DEBUG((DEBUG_ERROR, "ImageHeader->Version(0x%x) Unknown\n", ImageHeader->Version));\r
return EFI_INVALID_PARAMETER;\r
}\r
- if (ImageHeader->Version < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) {\r
+ ///\r
+ /// Current Init ImageHeader version is 3. UpdateHardwareInstance field was added in version 2\r
+ /// and ImageCapsuleSupport field was added in version 3\r
+ ///\r
+ if (ImageHeader->Version == 1) {\r
FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+ } else if (ImageHeader->Version == 2){\r
+ FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);\r
}\r
\r
// No overflow\r
} else {\r
//\r
// If the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER is version 1, only match ImageTypeId.\r
- // Header should exclude UpdateHardwareInstance field\r
+ // Header should exclude UpdateHardwareInstance field.\r
+ // If version is 2 Header should exclude ImageCapsuleSupport field.\r
//\r
- Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+ if (ImageHeader->Version == 1) {\r
+ Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+ } else {\r
+ Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);\r
+ }\r
}\r
\r
Status = ProcessRecoveryImage (Image, ImageHeader->UpdateImageSize);\r