summaryrefslogtreecommitdiff
path: root/Tools/CCode/Source/GenBsfImage/GenBsfImage.h
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/CCode/Source/GenBsfImage/GenBsfImage.h')
-rw-r--r--Tools/CCode/Source/GenBsfImage/GenBsfImage.h633
1 files changed, 633 insertions, 0 deletions
diff --git a/Tools/CCode/Source/GenBsfImage/GenBsfImage.h b/Tools/CCode/Source/GenBsfImage/GenBsfImage.h
new file mode 100644
index 0000000000..1efbebcb18
--- /dev/null
+++ b/Tools/CCode/Source/GenBsfImage/GenBsfImage.h
@@ -0,0 +1,633 @@
+/*++
+
+Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ GenBsfImage.h
+
+Abstract:
+
+ This file contains the relevant declarations required
+ to generate Boot Strap File
+
+--*/
+
+//
+// Module Coded to EFI 2.0 Coding Conventions
+//
+#ifndef _EFI_GEN_BSF_IMAGE_H
+#define _EFI_GEN_BSF_IMAGE_H
+
+//
+// External Files Referenced
+//
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <io.h>
+#include "assert.h"
+// #include "TianoCommon.h"
+#include "Common/FirmwareFileSystem.h"
+#include "Common/FirmwareVolumeHeader.h"
+#include "ParseInf.h"
+
+//
+// Internal Constants
+//
+#define EFI_IPF_VTF1_GUID \
+ { \
+ 0xfa371c9b, 0x5a86, 0x4198, 0xab, 0xc2, 0xed, 0x3f, 0xaa, 0xce, 0xb0, 0x8b \
+ };
+
+#define EFI_IPF_VTF2_GUID \
+ { \
+ 0x624a0d5a, 0x315f, 0x40b6, 0xa6, 0x33, 0xe5, 0xf7, 0xde, 0x58, 0x20, 0xa0 \
+ };
+
+#define EFI_IA32_BOOT_STRAP_GUID \
+ { \
+ 0xd4260a8d, 0x356, 0x4f45, 0x85, 0xe9, 0xad, 0x1d, 0x79, 0x22, 0x79, 0xf0 \
+ };
+
+#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 BSF_INPUT_FILE "BSF.INF"
+#define BSF_OUTPUT_FILE "Bsf.RAW"
+#define BSF_SYM_FILE "Bsf.SYM"
+#define FIT_SIGNATURE "_FIT_ "
+
+//
+// This is IA32 seccore
+//
+#define COMP_TYPE_SECCORE 0x0F
+
+//
+//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 0x8000000000000000
+
+//
+// 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 "GenBsfImage"
+
+//
+// Utility version information
+//
+#define UTILITY_MAJOR_VERSION 0
+#define UTILITY_MINOR_VERSION 0
+#define UTILITY_DATE __DATE__
+
+//
+// The maximum number of arguments accepted from the command line.
+//
+#define ONE_BSF_ARGS 5
+#define TWO_BSF_ARGS 9
+
+//
+// The number of IA32 bsf arguments accepted from the command line.
+//
+#define IA32_ARGS 3
+
+#define IA32_SOFT_FIT "IA32BsfAddress.inf"
+
+//
+// Internal Data Structure
+//
+typedef enum _LOC_TYPE
+{
+ NONE, // In case there is - INF file
+ FIRST_VTF, // First VTF
+ SECOND_VTF, // Outside BSF
+} LOC_TYPE;
+
+typedef struct _PARSED_BSF_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 _ParsedBsfInfo *' to 'struct _PARSED_BSF_INFO *'
+ // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedBsfInfo *' to 'struct _PARSED_BSF_INFO *'
+ // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedBsfInfo *' to 'struct _PARSED_BSF_INFO *'
+ // Fixed - warning C4133: '=' : incompatible types - from 'struct _ParsedBsfInfo *' to 'struct _PARSED_BSF_INFO *'
+ //
+ struct _PARSED_BSF_INFO *NextBsfInfo;
+} PARSED_BSF_INFO;
+
+#pragma pack (1)
+typedef struct {
+ UINT64 CompAddress;
+ UINT32 CompSize;
+ UINT16 CompVersion;
+ UINT8 CvAndType;
+ UINT8 CheckSum;
+} FIT_TABLE;
+#pragma pack ()
+
+//
+// The function that displays general utility information
+//
+VOID
+PrintUtilityInfo (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ Displays the standard utility information to SDTOUT
+
+Arguments:
+
+ None
+
+Returns:
+
+ None
+
+--*/
+;
+
+//
+// The function that displays the utility usage message.
+//
+VOID
+PrintUsage (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ Displays the utility usage syntax to STDOUT
+
+Arguments:
+
+ None
+
+Returns:
+
+ None
+
+--*/
+;
+
+//
+// Other Function Prototype Declarations
+//
+
+EFI_STATUS
+UpdateBsfBuffer(
+ 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 BSF
+
+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
+ )
+/*++
+
+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.
+
+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
+GenerateBsfImage (
+ IN UINT64 StartAddress1,
+ IN UINT64 Size1,
+ IN UINT64 StartAddress2,
+ IN UINT64 Size2
+ )
+/*++
+
+Routine Description:
+
+ This is the main function which will be called from application.
+
+Arguments:
+
+ StartAddress1 - The start address of the first BSF
+ Size1 - The size of the first BSF
+ StartAddress2 - The start address of the second BSF
+ Size2 - The size of the second BSF
+
+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:
+ GetBsfRelatedInfoFromInfFile
+ ProcessAndCreateBsf
+ UpdateIA32ResetVector
+ UpdateFfsHeader
+ WriteBsfBinary
+
+--*/
+;
+
+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
+
+--*/
+;
+
+EFI_STATUS
+Generate32BsfImage (
+IN UINT64 BootFileStartAddress
+ )
+/*++
+
+Routine Description:
+
+ This is the main IA32 function which will be called from application.
+ (Now this tool is not used for IA32 platform, if it will be used in future,
+ the relative functions need to be updated, the updating can refer to IPF
+ functions)
+
+Arguments:
+
+ BootFileStartAddress - Top Address of Boot File
+
+Returns:
+
+ The return value can be any of the values
+ returned by the calls to following functions:
+ Get32BsfRelatedInfoFromInfFile
+ CreateBsfBuffer
+ ProcessAndCreate32Bsf
+ Update32FfsHeader
+ WriteBsfBinary
+
+--*/
+;
+
+EFI_STATUS
+GetTotal32BsfSize(
+ IN UINT32 *BsfSize
+ )
+/*++
+
+Routine Description:
+
+ This function calculates total size for IA32 BSF which would be needed to create
+ the buffer. This will be done using Passed Info link list and looking for the
+ size of the components which belong to BSF. The addtional file header is accounted.
+
+Arguments:
+
+ BSFSize - Pointer to the size of IA32 BSF
+
+Returns:
+
+ EFI_ABORTED - Returned due to one of the following resons:
+ (a) Error Opening File
+ EFI_SUCCESS - The fuction completes successfully
+
+--*/
+;
+
+EFI_STATUS
+ProcessAndCreate32Bsf (
+ IN UINT64 Size
+ )
+/*++
+
+Routine Description:
+
+ This function process the link list created during INF file parsing
+ and create component in IA32 BSF
+
+Arguments:
+
+ Size - Size of the Firmware Volume of which, this BSF belongs to.
+
+Returns:
+
+ EFI_UNSUPPORTED - Unknown component type
+ EFI_SUCCESS - The function completed successfully
+
+--*/
+;
+
+EFI_STATUS
+CreateAndUpdateSeccore (
+ IN PARSED_BSF_INFO *BsfInfo
+ )
+/*++
+
+Routine Description:
+
+ This function reads the binary file for seccore and update them
+ in IA32 BSF Buffer
+
+Arguments:
+
+ BsfInfo - Pointer to Parsed Info
+
+Returns:
+
+ EFI_ABORTED - Due to one of the following reasons:
+ (a)Error Opening File
+ (b)The PAL_A Size is more than specified size status
+ One of the values mentioned below returned from
+ call to UpdateSymFile
+ EFI_SUCCESS - The function completed successfully.
+ EFI_INVALID_PARAMETER - One of the input parameters was invalid.
+ EFI_ABORTED - An error occurred.UpdateSymFile
+
+--*/
+;
+
+EFI_STATUS
+CreateAndUpdate32Component (
+ IN PARSED_BSF_INFO *BsfInfo
+ )
+/*++
+
+Routine Description:
+
+ This function reads the binary file for each components. Add it at aligned address.
+
+Arguments:
+
+ BsfInfo - Pointer to Parsed Info
+
+Returns:
+
+ EFI_SUCCESS - The function completed successful
+ EFI_ABORTED - Aborted due to one of the many reasons like:
+ (a) Component Size greater than the specified size.
+ (b) Error opening files.
+ EFI_INVALID_PARAMETER - Value returned from call to UpdateEntryPoint()
+
+--*/
+;
+
+EFI_STATUS
+Update32FfsHeader(
+ IN UINT32 BsfSize
+ )
+/*++
+
+Routine Description:
+
+ Update the Firmware Volume Buffer with requested buffer data
+
+Arguments:
+
+ BsfSize - Size of the IA32 BSF
+
+Returns:
+
+ EFI_SUCCESS - The function completed successfully
+ EFI_INVALID_PARAMETER - The Ffs File Header Pointer is NULL
+
+--*/
+;
+
+EFI_STATUS
+Get32BsfRelatedInfoFromInfFile (
+ IN CHAR8 *FileName
+ )
+/*++
+
+Routine Description:
+
+ This function reads the input file, parse it and create a list of tokens
+ which is parsed and used, to intialize the data related to IA32 BSF
+
+Arguments:
+
+ FileName FileName which needed to be read to parse data
+
+Returns:
+
+ EFI_ABORTED Error in opening file
+ EFI_INVALID_PARAMETER File doesn't contain any valid informations
+ EFI_OUT_OF_RESOURCES Malloc Failed
+ EFI_SUCCESS The function completed successfully
+
+--*/
+;
+
+VOID
+Initialize32InFileInfo (
+ VOID
+ )
+/*++
+
+Routine Description:
+
+ This function intializes the relevant global variable which is being
+ used to store the information retrieved from IA32 INF file.
+
+Arguments:
+
+ NONE
+
+Returns:
+
+ NONE
+
+--*/
+;
+
+VOID
+ParseAndUpdate32Components (
+ IN PARSED_BSF_INFO *BsfInfo
+ )
+/*++
+
+Routine Description:
+
+ This function intializes the relevant global variable which is being
+ used to store the information retrieved from INF file.
+
+Arguments:
+
+ BsfInfo - A pointer to the BSF Info Structure
+
+
+Returns:
+
+ None
+
+--*/
+;
+
+EFI_STATUS
+Write32SoftFit(
+ IN CHAR8 *FileName,
+ IN PARSED_BSF_INFO *BsfInfo
+ )
+/*++
+
+Routine Description:
+
+ Write IA32 Firmware Volume component address from memory to a file.
+
+Arguments:
+
+ FileName Output File Name which needed to be created/
+ BsfInfo Parsed info link
+
+Returns:
+
+ EFI_ABORTED - Returned due to one of the following resons:
+ (a) Error Opening File
+ (b) Failing to copy buffers
+ EFI_SUCCESS - The fuction completes successfully
+
+--*/
+;
+
+#endif