Home | History | Annotate | Download | only in Guid
      1 /** @file
      2   Guid & data structure used for Delivering Capsules Containing Updates to
      3   EDKII System Firmware Management Protocol
      4 
      5   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 
     17 #ifndef __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__
     18 #define __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__
     19 
     20 /**
     21 
     22   1. Capsule Layout is below:
     23   +------------------------------------------+
     24   |    Capsule Header (OPTIONAL, WFU)        | <== ESRT.FwClass (Optional)
     25   +------------------------------------------+
     26   |          FMP Capsule Header              | <== EFI_FIRMWARE_MANAGEMENT_CAPSULE_ID_GUID
     27   +------------------------------------------+
     28   | FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER | <== PcdSystemFmpCapsuleImageTypeIdGuid
     29   +------------------------------------------+
     30   |     EFI_FIRMWARE_IMAGE_AUTHENTICATION    |
     31   +------------------------------------------+
     32   |             FMP Payload                  |
     33   +------------------------------------------+
     34 
     35   2. System FMP Payload is below:
     36   +------------------------------------------+
     37   |            EFI_FIRMWARE_VOLUME           |
     38   |  +------------------------------------+  |
     39   |  |       FFS (Configure File)         |  | <== gEdkiiSystemFmpCapsuleConfigFileGuid
     40   |  +------------------------------------+  |
     41   |  |         FFS (Driver FV)            |  | <== gEdkiiSystemFmpCapsuleDriverFvFileGuid
     42   |  +------------------------------------+  |
     43   |  |    FFS (System Firmware Image)     |  | <== PcdEdkiiSystemFirmwareFileGuid
     44   |  |  +------------------------------+  |  |
     45   |  |  |          FV Recovery         |  |  |
     46   |  |  |------------------------------|  |  |
     47   |  |  |           FV Main            |  |  |
     48   |  |  +------------------------------+  |  |
     49   |  +------------------------------------+  |
     50   +------------------------------------------+
     51 
     52   NOTE: There might be multiple FFS (System Firmware Image) exist in the System FMP Capsule.
     53   Only the one, whose FFS GUID matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
     54   The other FFS is ignored.
     55 
     56   3. The format of the recovery configuration is below:
     57 
     58   [Head]
     59   NumOfRecovery = <Num>     # Decimal
     60   Recovery0 = <Name1>       # String
     61   Recovery1 = <Name2>       # String
     62   Recovery<Num-1> = <NameX> # String
     63 
     64   [Name?]
     65   Length      = <Length>         # Fv Length (HEX)
     66   ImageOffset = <ImageOffset>    # Fv offset of this SystemFirmware image (HEX)
     67   FileGuid    = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  # PcdEdkiiSystemFirmwareFileGuid
     68 
     69   NOTE: The [Name?] entry may have differnt FileGuid.
     70   Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
     71   The other entry is ignored.
     72 
     73   4. The format of the capsule update configuration is below:
     74 
     75   [Head]
     76   NumOfUpdate = <Num>     # Decimal
     77   Update0 = <Name1>       # String
     78   Update1 = <Name2>       # String
     79   Update<Num-1> = <NameX> # String
     80 
     81   [Name?]
     82   FirmwareType = 0               # 0 - SystemFirmware, 1 - NvRam
     83   AddressType = 0                # 0 - relative address, 1 - absolute address.
     84   BaseAddress = <BaseAddress>    # Base address offset on flash (HEX)
     85   Length      = <Length>         # Image Length (HEX)
     86   ImageOffset = <ImageOffset>    # Image offset of this SystemFirmware image (HEX)
     87   FileGuid    = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  # PcdEdkiiSystemFirmwareFileGuid
     88 
     89   NOTE: The [Name?] entry may have differnt FileGuid.
     90   Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect.
     91   The other entry is ignored.
     92 
     93 **/
     94 
     95 #define EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE  SIGNATURE_32('S', 'F', 'I', 'D')
     96 
     97 #pragma pack(1)
     98 typedef struct {
     99   UINT32                                Signature;
    100   UINT32                                HeaderLength; // Length of EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR, excluding NameString
    101   UINT32                                Length;       // Length of the data structure, including NameString
    102   // Below structure is similar as UEFI EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetPackageInfo()
    103   UINT32                                PackageVersion;
    104   UINT32                                PackageVersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
    105   // Below structure is similar as UEFI EFI_FIRMWARE_IMAGE_DESCRIPTOR
    106   UINT8                                 ImageIndex;
    107   UINT8                                 Reserved[3];
    108   EFI_GUID                              ImageTypeId;
    109   UINT64                                ImageId;
    110   UINT32                                ImageIdNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
    111   UINT32                                Version;
    112   UINT32                                VersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char
    113   UINT8                                 Reserved2[4];
    114   UINT64                                Size;
    115   UINT64                                AttributesSupported;
    116   UINT64                                AttributesSetting;
    117   UINT64                                Compatibilities;
    118   UINT32                                LowestSupportedImageVersion;
    119   UINT32                                LastAttemptVersion;
    120   UINT32                                LastAttemptStatus;
    121   UINT8                                 Reserved3[4];
    122   UINT64                                HardwareInstance;
    123   // real string data
    124 //CHAR16                                ImageIdNameStr[];        // CHAR16 string including NULL terminate char
    125 //CHAR16                                VersionNameStr[];        // CHAR16 string including NULL terminate char
    126 //CHAR16                                PackageVersionNameStr[]; // CHAR16 string including NULL terminate char
    127 } EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR;
    128 #pragma pack()
    129 
    130 /**
    131   System Firmware Image Descriptor is below:
    132             +----------------------+
    133             | System Firmware (FV) |
    134             |+--------------------+|
    135             ||   FFS (Freeform)   || <== gEdkiiSystemFirmwareImageDescriptorFileGuid
    136             ||+------------------+||
    137             |||   SECTION (RAW)  |||
    138             |||  System Firmware |||
    139             ||| Image Descriptor |||
    140             ||+------------------+||
    141             |+--------------------+|
    142             |                      |
    143             |                      |
    144             +----------------------+
    145 **/
    146 
    147 extern EFI_GUID gEdkiiSystemFirmwareImageDescriptorFileGuid;
    148 extern EFI_GUID gEdkiiSystemFmpCapsuleConfigFileGuid;
    149 extern EFI_GUID gEdkiiSystemFmpCapsuleDriverFvFileGuid;
    150 
    151 #endif
    152