mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	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
 |