Home | History | Annotate | Download | only in GenVtf
      1 /** @file
      2 This file contains the relevant declarations required to generate Boot Strap File
      3 
      4 Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials are licensed and made available
      6 under the terms and conditions of the BSD License which accompanies this
      7 distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 //
     16 // Module Coded to EFI 2.0 Coding Conventions
     17 //
     18 #ifndef   __GEN_VTF_H__
     19 #define   __GEN_VTF_H__
     20 
     21 //
     22 // External Files Referenced
     23 //
     24 #include <stdio.h>
     25 #include <stdlib.h>
     26 #include <string.h>
     27 #ifndef __GNUC__
     28 #include <io.h>
     29 #endif
     30 #include "assert.h"
     31 #include <Common/PiFirmwareFile.h>
     32 #include "ParseInf.h"
     33 
     34 //
     35 // Internal Constants
     36 //
     37 #define CV_N_TYPE(a,b)            (UINT8)(((UINT8)a << 7) + (UINT8)b)  // Keeps the CV and Type in same byte field
     38 #define MAKE_VERSION(a,b)         (UINT16)(((UINT16)a << 8) + (UINT16)b)
     39 
     40 #define   FILE_NAME_SIZE          256
     41 #define   COMPONENT_NAME_SIZE     128
     42 #define   VTF_INPUT_FILE          "VTF.INF"
     43 #define   VTF_OUTPUT_FILE1        "VTF1.RAW"
     44 #define   VTF_OUTPUT_FILE2        "VTF2.RAW"
     45 #define   VTF_SYM_FILE            "Vtf.SYM"
     46 #define   FIT_SIGNATURE           "_FIT_   "
     47 
     48 //
     49 //Fit Type Definition
     50 //
     51 #define   COMP_TYPE_FIT_HEADER          0x00
     52 #define   COMP_TYPE_FIT_PAL_B           0x01
     53 
     54 //
     55 // This is generic PAL_A
     56 //
     57 #define   COMP_TYPE_FIT_PAL_A           0x0F
     58 #define   COMP_TYPE_FIT_PEICORE         0x10
     59 #define   COMP_TYPE_FIT_AUTOSCAN        0x30
     60 #define   COMP_TYPE_FIT_FV_BOOT         0x7E
     61 
     62 //
     63 //This is processor Specific PAL_A
     64 //
     65 #define   COMP_TYPE_FIT_PAL_A_SPECIFIC  0x0E
     66 #define   COMP_TYPE_FIT_UNUSED    0x7F
     67 
     68 #define   FIT_TYPE_MASK           0x7F
     69 #define   CHECKSUM_BIT_MASK       0x80
     70 
     71 //
     72 // IPF processor address is cached bit
     73 //
     74 #define IPF_CACHE_BIT 0x8000000000000000ULL
     75 
     76 //
     77 // Size definition to calculate the location from top of address for
     78 // each component
     79 //
     80 #define SIZE_IA32_RESET_VECT      0x10        // 16 Bytes
     81 #define SIZE_SALE_ENTRY_POINT     0x08        // 8 Byte
     82 #define SIZE_FIT_TABLE_ADD        0x08        // 8 Byte
     83 #define SIZE_FIT_TABLE_PAL_A      0x10
     84 #define SIZE_RESERVED             0x10
     85 
     86 
     87 #define SIZE_TO_OFFSET_PAL_A_END  (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + \
     88                                   SIZE_FIT_TABLE_ADD + SIZE_FIT_TABLE_PAL_A + \
     89                                   SIZE_RESERVED)
     90 #define SIZE_TO_PAL_A_FIT         (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + \
     91                                   SIZE_FIT_TABLE_ADD + SIZE_FIT_TABLE_PAL_A)
     92 
     93 #define SIZE_OF_PAL_HEADER        0x40        //PAL has 64 byte header
     94 
     95 //
     96 // Utility Name
     97 //
     98 #define UTILITY_NAME  "GenVtf"
     99 
    100 //
    101 // Utility version information
    102 //
    103 #define UTILITY_MAJOR_VERSION   0
    104 #define UTILITY_MINOR_VERSION   1
    105 #define UTILITY_DATE            __DATE__
    106 
    107 //
    108 // The maximum number of arguments accepted from the command line.
    109 //
    110 #define ONE_VTF_ARGS  10
    111 #define TWO_VTF_ARGS  12
    112 #define THREE_VTF_ARGS  16
    113 
    114 static BOOLEAN VerboseMode = FALSE;
    115 
    116 //
    117 // Internal Data Structure
    118 //
    119 typedef enum _LOC_TYPE
    120 {
    121   NONE,                   // In case there is - INF file
    122   FIRST_VTF,              // First VTF
    123   SECOND_VTF,             // Outside VTF
    124 } LOC_TYPE;
    125 
    126 typedef struct _PARSED_VTF_INFO {
    127   CHAR8       CompName[COMPONENT_NAME_SIZE];
    128   LOC_TYPE    LocationType;
    129   UINT8       CompType;
    130   UINT8       MajorVer;
    131   UINT8       MinorVer;
    132   UINT8       CheckSumRequired;
    133   BOOLEAN     VersionPresent;                // If it is TRUE, then, Version is in INF file
    134   BOOLEAN     PreferredSize;
    135   BOOLEAN     PreferredAddress;
    136   CHAR8       CompBinName[FILE_NAME_SIZE];
    137   CHAR8       CompSymName[FILE_NAME_SIZE];
    138   UINTN       CompSize;
    139   UINT64      CompPreferredAddress;
    140   UINT32      Align;
    141 
    142   //
    143   //  Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *'
    144   //  Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *'
    145   //  Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *'
    146   //  Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *'
    147   //
    148   struct      _PARSED_VTF_INFO   *NextVtfInfo;
    149 } PARSED_VTF_INFO;
    150 
    151 #pragma pack (1)
    152 typedef struct {
    153   UINT64      CompAddress;
    154   UINT32      CompSize;
    155   UINT16      CompVersion;
    156   UINT8       CvAndType;
    157   UINT8       CheckSum;
    158 } FIT_TABLE;
    159 #pragma pack ()
    160 
    161 //
    162 // Function Prototype Declarations
    163 //
    164 
    165 EFI_STATUS
    166 UpdateVtfBuffer(
    167   IN  UINT64    StartAddress,
    168   IN  UINT8     *Buffer,
    169   IN  UINT64    DataSize,
    170   IN  LOC_TYPE  LocType
    171   )
    172 /*++
    173 
    174 Routine Description:
    175 
    176   Update the Firmware Volume Buffer with requested buffer data
    177 
    178 Arguments:
    179 
    180   StartAddress   - StartAddress in buffer. This number will automatically
    181                   point to right address in buffer where data needed
    182                   to be updated.
    183   Buffer         - Buffer pointer from data will be copied to memory mapped buffer.
    184   DataSize       - Size of the data needed to be copied.
    185   LocType        - The type of the VTF
    186 
    187 Returns:
    188 
    189   EFI_ABORTED  - The input parameter is error
    190   EFI_SUCCESS  - The function completed successfully
    191 
    192 --*/
    193 ;
    194 
    195 EFI_STATUS
    196 UpdateSymFile (
    197   IN UINT64 BaseAddress,
    198   IN CHAR8  *DestFileName,
    199   IN CHAR8  *SourceFileName,
    200   IN UINT64 FileSize
    201   )
    202 /*++
    203 
    204 Routine Description:
    205 
    206   This function adds the SYM tokens in the source file to the destination file.
    207   The SYM tokens are updated to reflect the base address.
    208 
    209 Arguments:
    210 
    211   BaseAddress    - The base address for the new SYM tokens.
    212   DestFileName   - The destination file.
    213   SourceFileName - The source file.
    214   FileSize       - Size of bin file.
    215 
    216 Returns:
    217 
    218   EFI_SUCCESS             - The function completed successfully.
    219   EFI_INVALID_PARAMETER   - One of the input parameters was invalid.
    220   EFI_ABORTED             - An error occurred.
    221 
    222 --*/
    223 ;
    224 
    225 EFI_STATUS
    226 CalculateFitTableChecksum (
    227   VOID
    228   )
    229 /*++
    230 
    231 Routine Description:
    232 
    233   This function will perform byte checksum on the FIT table, if the the checksum required
    234   field is set to CheckSum required. If the checksum is not required then checksum byte
    235   will have value as 0;.
    236 
    237 Arguments:
    238 
    239   NONE
    240 
    241 Returns:
    242 
    243   Status       - Value returned by call to CalculateChecksum8 ()
    244   EFI_SUCCESS  - The function completed successfully
    245 
    246 --*/
    247 ;
    248 
    249 EFI_STATUS
    250 GenerateVtfImage (
    251   IN  UINT64  StartAddress1,
    252   IN  UINT64  Size1,
    253   IN  UINT64  StartAddress2,
    254   IN  UINT64  Size2,
    255   IN  FILE    *fp
    256   )
    257 /*++
    258 
    259 Routine Description:
    260 
    261   This is the main function which will be called from application.
    262 
    263 Arguments:
    264 
    265   StartAddress1  - The start address of the first VTF
    266   Size1          - The size of the first VTF
    267   StartAddress2  - The start address of the second VTF
    268   Size2          - The size of the second VTF
    269 
    270 Returns:
    271 
    272   EFI_OUT_OF_RESOURCES - Can not allocate memory
    273   The return value can be any of the values
    274   returned by the calls to following functions:
    275       GetVtfRelatedInfoFromInfFile
    276       ProcessAndCreateVtf
    277       UpdateIA32ResetVector
    278       UpdateFfsHeader
    279       WriteVtfBinary
    280 
    281 --*/
    282 ;
    283 
    284 EFI_STATUS
    285 PeimFixupInFitTable (
    286   IN  UINT64  StartAddress
    287   )
    288 /*++
    289 
    290 Routine Description:
    291 
    292   This function is an entry point to fixup SAL-E entry point.
    293 
    294 Arguments:
    295 
    296   StartAddress - StartAddress for PEIM.....
    297 
    298 Returns:
    299 
    300   EFI_SUCCESS   - The function completed successfully
    301   EFI_ABORTED   - Error Opening File
    302 
    303 --*/
    304 ;
    305 
    306 VOID
    307 Usage (
    308   VOID
    309   )
    310 /*++
    311 
    312 Routine Description:
    313 
    314   Displays the utility usage syntax to STDOUT
    315 
    316 Arguments:
    317 
    318   None
    319 
    320 Returns:
    321 
    322   None
    323 
    324 --*/
    325 ;
    326 #endif
    327