mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-25 19:51:46 +00:00 
			
		
		
		
	 97fa0ee9b1
			
		
	
	
		97fa0ee9b1
		
	
	
	
	
		
			
			Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yingke Liu <yingke.d.liu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15971 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			327 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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
 |