13705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/** @file
23705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Guid & data structure used for Delivering Capsules Containing Updates to
33705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  EDKII System Firmware Management Protocol
43705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
53705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
63705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  This program and the accompanying materials
73705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  are licensed and made available under the terms and conditions of the BSD License
83705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  which accompanies this distribution.  The full text of the license may be found at
93705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  http://opensource.org/licenses/bsd-license.php
103705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
113705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
123705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
133705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
143705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/
153705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
163705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
173705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#ifndef __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__
183705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#define __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__
193705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
203705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/**
213705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
223705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  1. Capsule Layout is below:
233705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
243705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |    Capsule Header (OPTIONAL, WFU)        | <== ESRT.FwClass (Optional)
253705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
263705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |          FMP Capsule Header              | <== EFI_FIRMWARE_MANAGEMENT_CAPSULE_ID_GUID
273705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
283705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  | FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER | <== PcdSystemFmpCapsuleImageTypeIdGuid
293705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
303705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |     EFI_FIRMWARE_IMAGE_AUTHENTICATION    |
313705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
323705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |             FMP Payload                  |
333705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
343705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
353705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  2. System FMP Payload is below:
363705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
373705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |            EFI_FIRMWARE_VOLUME           |
383705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  +------------------------------------+  |
393705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |       FFS (Configure File)         |  | <== gEdkiiSystemFmpCapsuleConfigFileGuid
403705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  +------------------------------------+  |
413705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |         FFS (Driver FV)            |  | <== gEdkiiSystemFmpCapsuleDriverFvFileGuid
423705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  +------------------------------------+  |
433705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |    FFS (System Firmware Image)     |  | <== PcdEdkiiSystemFirmwareFileGuid
443705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |  +------------------------------+  |  |
453705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |  |          FV Recovery         |  |  |
463705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |  |------------------------------|  |  |
473705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |  |           FV Main            |  |  |
483705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  |  +------------------------------+  |  |
493705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  |  +------------------------------------+  |
503705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  +------------------------------------------+
513705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
523705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  NOTE: There might be multiple FFS (System Firmware Image) exist in the System FMP Capsule.
533705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Only the one, whose FFS GUID matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
543705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  The other FFS is ignored.
553705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
563705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  3. The format of the recovery configuration is below:
573705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
583705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  [Head]
593705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  NumOfRecovery = <Num>     # Decimal
603705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Recovery0 = <Name1>       # String
613705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Recovery1 = <Name2>       # String
623705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Recovery<Num-1> = <NameX> # String
633705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
643705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  [Name?]
653705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Length      = <Length>         # Fv Length (HEX)
663705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  ImageOffset = <ImageOffset>    # Fv offset of this SystemFirmware image (HEX)
673705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  FileGuid    = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  # PcdEdkiiSystemFirmwareFileGuid
683705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
693705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  NOTE: The [Name?] entry may have differnt FileGuid.
703705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
713705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  The other entry is ignored.
723705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
733705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  4. The format of the capsule update configuration is below:
743705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
753705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  [Head]
763705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  NumOfUpdate = <Num>     # Decimal
773705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Update0 = <Name1>       # String
783705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Update1 = <Name2>       # String
793705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Update<Num-1> = <NameX> # String
803705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
813705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  [Name?]
823705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  FirmwareType = 0               # 0 - SystemFirmware, 1 - NvRam
833705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  AddressType = 0                # 0 - relative address, 1 - absolute address.
843705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  BaseAddress = <BaseAddress>    # Base address offset on flash (HEX)
853705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Length      = <Length>         # Image Length (HEX)
863705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  ImageOffset = <ImageOffset>    # Image offset of this SystemFirmware image (HEX)
873705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  FileGuid    = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  # PcdEdkiiSystemFirmwareFileGuid
883705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
893705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  NOTE: The [Name?] entry may have differnt FileGuid.
903705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
913705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  The other entry is ignored.
923705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
933705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/
943705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
953705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#define EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE  SIGNATURE_32('S', 'F', 'I', 'D')
963705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
973705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#pragma pack(1)
983705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaotypedef struct {
993705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                Signature;
1003705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                HeaderLength; // Length of EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR, excluding NameString
1013705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                Length;       // Length of the data structure, including NameString
1023705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  // Below structure is similar as UEFI EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetPackageInfo()
1033705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                PackageVersion;
1043705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                PackageVersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
1053705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  // Below structure is similar as UEFI EFI_FIRMWARE_IMAGE_DESCRIPTOR
1063705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT8                                 ImageIndex;
1073705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT8                                 Reserved[3];
1083705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  EFI_GUID                              ImageTypeId;
1093705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                ImageId;
1103705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                ImageIdNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
1113705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                Version;
1123705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                VersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
1133705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT8                                 Reserved2[4];
1143705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                Size;
1153705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                AttributesSupported;
1163705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                AttributesSetting;
1173705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                Compatibilities;
1183705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                LowestSupportedImageVersion;
1193705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                LastAttemptVersion;
1203705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT32                                LastAttemptStatus;
1213705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT8                                 Reserved3[4];
1223705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  UINT64                                HardwareInstance;
1233705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  // real string data
1243705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16                                ImageIdNameStr[];        // CHAR16 string including NULL terminate char
1253705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16                                VersionNameStr[];        // CHAR16 string including NULL terminate char
1263705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16                                PackageVersionNameStr[]; // CHAR16 string including NULL terminate char
1273705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao} EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR;
1283705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#pragma pack()
1293705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
1303705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/**
1313705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao  System Firmware Image Descriptor is below:
1323705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            +----------------------+
1333705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            | System Firmware (FV) |
1343705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |+--------------------+|
1353705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            ||   FFS (Freeform)   || <== gEdkiiSystemFirmwareImageDescriptorFileGuid
1363705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            ||+------------------+||
1373705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |||   SECTION (RAW)  |||
1383705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |||  System Firmware |||
1393705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            ||| Image Descriptor |||
1403705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            ||+------------------+||
1413705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |+--------------------+|
1423705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |                      |
1433705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            |                      |
1443705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao            +----------------------+
1453705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/
1463705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
1473705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFirmwareImageDescriptorFileGuid;
1483705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFmpCapsuleConfigFileGuid;
1493705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFmpCapsuleDriverFvFileGuid;
1503705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao
1513705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#endif
152