| /** @file | |
| This file contains the relevant declarations required to generate Boot Strap File | |
| Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available | |
| under the terms and conditions of the BSD License which accompanies this | |
| distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| // | |
| // Module Coded to EFI 2.0 Coding Conventions | |
| // | |
| #ifndef __GEN_VTF_H__ | |
| #define __GEN_VTF_H__ | |
| // | |
| // External Files Referenced | |
| // | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #ifndef __GNUC__ | |
| #include <io.h> | |
| #endif | |
| #include "assert.h" | |
| #include <Common/PiFirmwareFile.h> | |
| #include "ParseInf.h" | |
| // | |
| // Internal Constants | |
| // | |
| #define CV_N_TYPE(a,b) (UINT8)(((UINT8)a << 7) + (UINT8)b) // Keeps the CV and Type in same byte field | |
| #define MAKE_VERSION(a,b) (UINT16)(((UINT16)a << 8) + (UINT16)b) | |
| #define FILE_NAME_SIZE 256 | |
| #define COMPONENT_NAME_SIZE 128 | |
| #define VTF_INPUT_FILE "VTF.INF" | |
| #define VTF_OUTPUT_FILE1 "VTF1.RAW" | |
| #define VTF_OUTPUT_FILE2 "VTF2.RAW" | |
| #define VTF_SYM_FILE "Vtf.SYM" | |
| #define FIT_SIGNATURE "_FIT_ " | |
| // | |
| //Fit Type Definition | |
| // | |
| #define COMP_TYPE_FIT_HEADER 0x00 | |
| #define COMP_TYPE_FIT_PAL_B 0x01 | |
| // | |
| // This is generic PAL_A | |
| // | |
| #define COMP_TYPE_FIT_PAL_A 0x0F | |
| #define COMP_TYPE_FIT_PEICORE 0x10 | |
| #define COMP_TYPE_FIT_AUTOSCAN 0x30 | |
| #define COMP_TYPE_FIT_FV_BOOT 0x7E | |
| // | |
| //This is processor Specific PAL_A | |
| // | |
| #define COMP_TYPE_FIT_PAL_A_SPECIFIC 0x0E | |
| #define COMP_TYPE_FIT_UNUSED 0x7F | |
| #define FIT_TYPE_MASK 0x7F | |
| #define CHECKSUM_BIT_MASK 0x80 | |
| // | |
| // IPF processor address is cached bit | |
| // | |
| #define IPF_CACHE_BIT 0x8000000000000000ULL | |
| // | |
| // Size definition to calculate the location from top of address for | |
| // each component | |
| // | |
| #define SIZE_IA32_RESET_VECT 0x10 // 16 Bytes | |
| #define SIZE_SALE_ENTRY_POINT 0x08 // 8 Byte | |
| #define SIZE_FIT_TABLE_ADD 0x08 // 8 Byte | |
| #define SIZE_FIT_TABLE_PAL_A 0x10 | |
| #define SIZE_RESERVED 0x10 | |
| #define SIZE_TO_OFFSET_PAL_A_END (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + \ | |
| SIZE_FIT_TABLE_ADD + SIZE_FIT_TABLE_PAL_A + \ | |
| SIZE_RESERVED) | |
| #define SIZE_TO_PAL_A_FIT (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + \ | |
| SIZE_FIT_TABLE_ADD + SIZE_FIT_TABLE_PAL_A) | |
| #define SIZE_OF_PAL_HEADER 0x40 //PAL has 64 byte header | |
| // | |
| // Utility Name | |
| // | |
| #define UTILITY_NAME "GenVtf" | |
| // | |
| // Utility version information | |
| // | |
| #define UTILITY_MAJOR_VERSION 0 | |
| #define UTILITY_MINOR_VERSION 1 | |
| #define UTILITY_DATE __DATE__ | |
| // | |
| // The maximum number of arguments accepted from the command line. | |
| // | |
| #define ONE_VTF_ARGS 10 | |
| #define TWO_VTF_ARGS 12 | |
| #define THREE_VTF_ARGS 16 | |
| static BOOLEAN VerboseMode = FALSE; | |
| // | |
| // Internal Data Structure | |
| // | |
| typedef enum _LOC_TYPE | |
| { | |
| NONE, // In case there is - INF file | |
| FIRST_VTF, // First VTF | |
| SECOND_VTF, // Outside VTF | |
| } LOC_TYPE; | |
| typedef struct _PARSED_VTF_INFO { | |
| CHAR8 CompName[COMPONENT_NAME_SIZE]; | |
| LOC_TYPE LocationType; | |
| UINT8 CompType; | |
| UINT8 MajorVer; | |
| UINT8 MinorVer; | |
| UINT8 CheckSumRequired; | |
| BOOLEAN VersionPresent; // If it is TRUE, then, Version is in INF file | |
| BOOLEAN PreferredSize; | |
| BOOLEAN PreferredAddress; | |
| CHAR8 CompBinName[FILE_NAME_SIZE]; | |
| CHAR8 CompSymName[FILE_NAME_SIZE]; | |
| UINTN CompSize; | |
| UINT64 CompPreferredAddress; | |
| UINT32 Align; | |
| // | |
| // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' | |
| // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' | |
| // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' | |
| // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' | |
| // | |
| struct _PARSED_VTF_INFO *NextVtfInfo; | |
| } PARSED_VTF_INFO; | |
| #pragma pack (1) | |
| typedef struct { | |
| UINT64 CompAddress; | |
| UINT32 CompSize; | |
| UINT16 CompVersion; | |
| UINT8 CvAndType; | |
| UINT8 CheckSum; | |
| } FIT_TABLE; | |
| #pragma pack () | |
| // | |
| // Function Prototype Declarations | |
| // | |
| EFI_STATUS | |
| UpdateVtfBuffer( | |
| IN UINT64 StartAddress, | |
| IN UINT8 *Buffer, | |
| IN UINT64 DataSize, | |
| IN LOC_TYPE LocType | |
| ) | |
| /*++ | |
| Routine Description: | |
| Update the Firmware Volume Buffer with requested buffer data | |
| Arguments: | |
| StartAddress - StartAddress in buffer. This number will automatically | |
| point to right address in buffer where data needed | |
| to be updated. | |
| Buffer - Buffer pointer from data will be copied to memory mapped buffer. | |
| DataSize - Size of the data needed to be copied. | |
| LocType - The type of the VTF | |
| Returns: | |
| EFI_ABORTED - The input parameter is error | |
| EFI_SUCCESS - The function completed successfully | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| UpdateSymFile ( | |
| IN UINT64 BaseAddress, | |
| IN CHAR8 *DestFileName, | |
| IN CHAR8 *SourceFileName, | |
| IN UINT64 FileSize | |
| ) | |
| /*++ | |
| Routine Description: | |
| This function adds the SYM tokens in the source file to the destination file. | |
| The SYM tokens are updated to reflect the base address. | |
| Arguments: | |
| BaseAddress - The base address for the new SYM tokens. | |
| DestFileName - The destination file. | |
| SourceFileName - The source file. | |
| FileSize - Size of bin file. | |
| Returns: | |
| EFI_SUCCESS - The function completed successfully. | |
| EFI_INVALID_PARAMETER - One of the input parameters was invalid. | |
| EFI_ABORTED - An error occurred. | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| CalculateFitTableChecksum ( | |
| VOID | |
| ) | |
| /*++ | |
| Routine Description: | |
| This function will perform byte checksum on the FIT table, if the the checksum required | |
| field is set to CheckSum required. If the checksum is not required then checksum byte | |
| will have value as 0;. | |
| Arguments: | |
| NONE | |
| Returns: | |
| Status - Value returned by call to CalculateChecksum8 () | |
| EFI_SUCCESS - The function completed successfully | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| GenerateVtfImage ( | |
| IN UINT64 StartAddress1, | |
| IN UINT64 Size1, | |
| IN UINT64 StartAddress2, | |
| IN UINT64 Size2, | |
| IN FILE *fp | |
| ) | |
| /*++ | |
| Routine Description: | |
| This is the main function which will be called from application. | |
| Arguments: | |
| StartAddress1 - The start address of the first VTF | |
| Size1 - The size of the first VTF | |
| StartAddress2 - The start address of the second VTF | |
| Size2 - The size of the second VTF | |
| Returns: | |
| EFI_OUT_OF_RESOURCES - Can not allocate memory | |
| The return value can be any of the values | |
| returned by the calls to following functions: | |
| GetVtfRelatedInfoFromInfFile | |
| ProcessAndCreateVtf | |
| UpdateIA32ResetVector | |
| UpdateFfsHeader | |
| WriteVtfBinary | |
| --*/ | |
| ; | |
| EFI_STATUS | |
| PeimFixupInFitTable ( | |
| IN UINT64 StartAddress | |
| ) | |
| /*++ | |
| Routine Description: | |
| This function is an entry point to fixup SAL-E entry point. | |
| Arguments: | |
| StartAddress - StartAddress for PEIM..... | |
| Returns: | |
| EFI_SUCCESS - The function completed successfully | |
| EFI_ABORTED - Error Opening File | |
| --*/ | |
| ; | |
| VOID | |
| Usage ( | |
| VOID | |
| ) | |
| /*++ | |
| Routine Description: | |
| Displays the utility usage syntax to STDOUT | |
| Arguments: | |
| None | |
| Returns: | |
| None | |
| --*/ | |
| ; | |
| #endif |