Home | History | Annotate | Download | only in Guid
      1 /** @file
      2   Intel FSP Header File definition from Intel Firmware Support Package External
      3   Architecture Specification v2.0.
      4 
      5   Copyright (c) 2014 - 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 #ifndef __FSP_HEADER_FILE_H__
     17 #define __FSP_HEADER_FILE_H__
     18 
     19 #define FSP_HEADER_REVISION_3   3
     20 
     21 #define FSPE_HEADER_REVISION_1  1
     22 #define FSPP_HEADER_REVISION_1  1
     23 
     24 ///
     25 /// Fixed FSP header offset in the FSP image
     26 ///
     27 #define FSP_INFO_HEADER_OFF    0x94
     28 
     29 #define OFFSET_IN_FSP_INFO_HEADER(x)  (UINT32)&((FSP_INFO_HEADER *)(UINTN)0)->x
     30 
     31 #define FSP_INFO_HEADER_SIGNATURE  SIGNATURE_32 ('F', 'S', 'P', 'H')
     32 
     33 #pragma pack(1)
     34 
     35 ///
     36 /// FSP Information Header as described in FSP v2.0 Spec section 5.1.1.
     37 ///
     38 typedef struct {
     39   ///
     40   /// Byte 0x00: Signature ('FSPH') for the FSP Information Header.
     41   ///
     42   UINT32  Signature;
     43   ///
     44   /// Byte 0x04: Length of the FSP Information Header.
     45   ///
     46   UINT32  HeaderLength;
     47   ///
     48   /// Byte 0x08: Reserved.
     49   ///
     50   UINT8   Reserved1[2];
     51   ///
     52   /// Byte 0x0A: Indicates compliance with a revision of this specification in the BCD format.
     53   ///
     54   UINT8   SpecVersion;
     55   ///
     56   /// Byte 0x0B: Revision of the FSP Information Header.
     57   ///
     58   UINT8   HeaderRevision;
     59   ///
     60   /// Byte 0x0C: Revision of the FSP binary.
     61   ///
     62   UINT32  ImageRevision;
     63   ///
     64   /// Byte 0x10: Signature string that will help match the FSP Binary to a supported HW configuration.
     65   ///
     66   CHAR8   ImageId[8];
     67   ///
     68   /// Byte 0x18: Size of the entire FSP binary.
     69   ///
     70   UINT32  ImageSize;
     71   ///
     72   /// Byte 0x1C: FSP binary preferred base address.
     73   ///
     74   UINT32  ImageBase;
     75   ///
     76   /// Byte 0x20: Attribute for the FSP binary.
     77   ///
     78   UINT16  ImageAttribute;
     79   ///
     80   /// Byte 0x22: Attributes of the FSP Component.
     81   ///
     82   UINT16  ComponentAttribute;
     83   ///
     84   /// Byte 0x24: Offset of the FSP configuration region.
     85   ///
     86   UINT32  CfgRegionOffset;
     87   ///
     88   /// Byte 0x28: Size of the FSP configuration region.
     89   ///
     90   UINT32  CfgRegionSize;
     91   ///
     92   /// Byte 0x2C: Reserved2.
     93   ///
     94   UINT32  Reserved2;
     95   ///
     96   /// Byte 0x30: The offset for the API to setup a temporary stack till the memory is initialized.
     97   ///
     98   UINT32  TempRamInitEntryOffset;
     99   ///
    100   /// Byte 0x34: Reserved3.
    101   ///
    102   UINT32  Reserved3;
    103   ///
    104   /// Byte 0x38: The offset for the API to inform the FSP about the different stages in the boot process.
    105   ///
    106   UINT32  NotifyPhaseEntryOffset;
    107   ///
    108   /// Byte 0x3C: The offset for the API to initialize the memory.
    109   ///
    110   UINT32  FspMemoryInitEntryOffset;
    111   ///
    112   /// Byte 0x40: The offset for the API to tear down temporary RAM.
    113   ///
    114   UINT32  TempRamExitEntryOffset;
    115   ///
    116   /// Byte 0x44: The offset for the API to initialize the CPU and chipset.
    117   ///
    118   UINT32  FspSiliconInitEntryOffset;
    119 } FSP_INFO_HEADER;
    120 
    121 ///
    122 /// Signature of the FSP Extended Header
    123 ///
    124 #define FSP_INFO_EXTENDED_HEADER_SIGNATURE  SIGNATURE_32 ('F', 'S', 'P', 'E')
    125 
    126 ///
    127 /// FSP Information Extended Header as described in FSP v2.0 Spec section 5.1.2.
    128 ///
    129 typedef struct {
    130   ///
    131   /// Byte 0x00: Signature ('FSPE') for the FSP Extended Information Header.
    132   ///
    133   UINT32  Signature;
    134   ///
    135   /// Byte 0x04: Length of the table in bytes, including all additional FSP producer defined data.
    136   ///
    137   UINT32  Length;
    138   ///
    139   /// Byte 0x08: FSP producer defined revision of the table.
    140   ///
    141   UINT8   Revision;
    142   ///
    143   /// Byte 0x09: Reserved for future use.
    144   ///
    145   UINT8   Reserved;
    146   ///
    147   /// Byte 0x0A: FSP producer identification string
    148   ///
    149   CHAR8   FspProducerId[6];
    150   ///
    151   /// Byte 0x10: FSP producer implementation revision number. Larger numbers are assumed to be newer revisions.
    152   ///
    153   UINT32  FspProducerRevision;
    154   ///
    155   /// Byte 0x14: Size of the FSP producer defined data (n) in bytes.
    156   ///
    157   UINT32  FspProducerDataSize;
    158   ///
    159   /// Byte 0x18: FSP producer defined data of size (n) defined by FspProducerDataSize.
    160   ///
    161 } FSP_INFO_EXTENDED_HEADER;
    162 
    163 //
    164 // A generic table search algorithm for additional tables can be implemented with a
    165 // signature search algorithm until a terminator signature 'FSPP' is found.
    166 //
    167 #define FSP_FSPP_SIGNATURE  SIGNATURE_32 ('F', 'S', 'P', 'P')
    168 #define FSP_PATCH_TABLE_SIGNATURE  FSP_FSPP_SIGNATURE
    169 
    170 ///
    171 /// FSP Patch Table as described in FSP v2.0 Spec section 5.1.5.
    172 ///
    173 typedef struct {
    174   ///
    175   /// Byte 0x00: FSP Patch Table Signature "FSPP".
    176   ///
    177   UINT32  Signature;
    178   ///
    179   /// Byte 0x04: Size including the PatchData.
    180   ///
    181   UINT16  HeaderLength;
    182   ///
    183   /// Byte 0x06: Revision is set to 0x01.
    184   ///
    185   UINT8   HeaderRevision;
    186   ///
    187   /// Byte 0x07: Reserved for future use.
    188   ///
    189   UINT8   Reserved;
    190   ///
    191   /// Byte 0x08: Number of entries to Patch.
    192   ///
    193   UINT32  PatchEntryNum;
    194   ///
    195   /// Byte 0x0C: Patch Data.
    196   ///
    197 //UINT32  PatchData[];
    198 } FSP_PATCH_TABLE;
    199 
    200 #pragma pack()
    201 
    202 extern EFI_GUID gFspHeaderFileGuid;
    203 
    204 #endif
    205