2009-07-17 11:10:31 +02:00
|
|
|
/** @file
|
|
|
|
|
2009-12-29 07:16:53 +01:00
|
|
|
Copyright (c) 1999-2008 Intel Corporation. All rights reserved
|
|
|
|
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.
|
2009-07-17 11:10:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
|
|
GenVtf.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
This file contains the relevant declarations required
|
|
|
|
to generate Boot Strap File
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
//
|
|
|
|
// 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>
|
2009-09-11 05:14:43 +02:00
|
|
|
#ifndef __GNUC__
|
|
|
|
#include <io.h>
|
|
|
|
#endif
|
2009-07-17 11:10:31 +02:00
|
|
|
#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,
|
2009-11-09 12:47:35 +01:00
|
|
|
IN CHAR8 *SourceFileName,
|
|
|
|
IN UINT64 FileSize
|
2009-07-17 11:10:31 +02:00
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
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.
|
2009-11-09 12:47:35 +01:00
|
|
|
FileSize - Size of bin file.
|
2009-07-17 11:10:31 +02:00
|
|
|
|
|
|
|
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
|