public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH] BaseTools: Remove GenVtf
@ 2018-11-23  5:47 Shenglei Zhang
  2018-11-23 15:10 ` Gao, Liming
  0 siblings, 1 reply; 3+ messages in thread
From: Shenglei Zhang @ 2018-11-23  5:47 UTC (permalink / raw)
  To: edk2-devel; +Cc: Yonghong Zhu, Liming Gao

GenVtf C tool is IPF specific. IPF support has been removed
from edk2 trunk. This tool can be removed.
https://bugzilla.tianocore.org/show_bug.cgi?id=1349

Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
 BaseTools/Source/BinaryFiles.txt      |    1 -
 BaseTools/Source/C/GenVtf/GNUmakefile |   21 -
 BaseTools/Source/C/GenVtf/GenVtf.c    | 2811 -------------------------
 BaseTools/Source/C/GenVtf/GenVtf.h    |  326 ---
 BaseTools/Source/C/GenVtf/Makefile    |   22 -
 BaseTools/toolsetup.bat               |    1 -
 6 files changed, 3182 deletions(-)
 delete mode 100644 BaseTools/Source/C/GenVtf/GNUmakefile
 delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.c
 delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.h
 delete mode 100644 BaseTools/Source/C/GenVtf/Makefile

diff --git a/BaseTools/Source/BinaryFiles.txt b/BaseTools/Source/BinaryFiles.txt
index aad138ebd5..d707df9dda 100644
--- a/BaseTools/Source/BinaryFiles.txt
+++ b/BaseTools/Source/BinaryFiles.txt
@@ -44,7 +44,6 @@ GenFw.exe
 GenPage.exe
 GenPatchPcdTable.exe
 GenSec.exe
-GenVtf.exe
 ImportTool.bat
 LzmaCompress.exe
 LzmaF86Compress.bat
diff --git a/BaseTools/Source/C/GenVtf/GNUmakefile b/BaseTools/Source/C/GenVtf/GNUmakefile
deleted file mode 100644
index 54160c64d4..0000000000
--- a/BaseTools/Source/C/GenVtf/GNUmakefile
+++ /dev/null
@@ -1,21 +0,0 @@
-## @file
-# GNU/Linux makefile for 'GenVtf' module build.
-#
-# Copyright (c) 2007 - 2018, 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.
-#
-MAKEROOT ?= ..
-
-APPNAME = GenVtf
-
-LIBS = -lCommon
-
-OBJECTS = GenVtf.o
-
-include $(MAKEROOT)/Makefiles/app.makefile
diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c
deleted file mode 100644
index 3a7ac06156..0000000000
--- a/BaseTools/Source/C/GenVtf/GenVtf.c
+++ /dev/null
@@ -1,2811 +0,0 @@
-/** @file
-This file contains functions required to generate a boot strap file (BSF) also
-known as the Volume Top File (VTF)
-
-Copyright (c) 1999 - 2018, 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.
-
-**/
-
-//
-//
-//
-#include <FvLib.h>
-#include <Common/UefiBaseTypes.h>
-#include "GenVtf.h"
-#include <Guid/PiFirmwareFileSystem.h>
-#include "CommonLib.h"
-#include "EfiUtilityMsgs.h"
-
-//
-// Global variables
-//
-UINTN SectionOptionFlag = 0;
-UINTN SectionCompFlag = 0;
-
-UINT64        DebugLevel;
-BOOLEAN       DebugMode;
-
-BOOLEAN     QuietMode = FALSE;
-
-BOOLEAN     VTF_OUTPUT = FALSE;
-CHAR8       *OutFileName1;
-CHAR8       *OutFileName2;
-CHAR8       *SymFileName;
-
-CHAR8           **TokenStr;
-CHAR8           **OrgStrTokPtr;
-
-PARSED_VTF_INFO *FileListPtr;
-PARSED_VTF_INFO *FileListHeadPtr;
-
-VOID            *Vtf1Buffer;
-VOID            *Vtf1EndBuffer;
-VOID            *Vtf2Buffer;
-VOID            *Vtf2EndBuffer;
-
-UINTN           ValidLineNum        = 0;
-UINTN           ValidFFDFileListNum = 0;
-
-//
-// Section Description and their number of occurences in *.INF file
-//
-UINTN           NumFvFiles        = 0;
-UINTN           SectionOptionNum  = 0;
-
-//
-// Global flag which will check for VTF Present, if yes then will be used
-// to decide about adding FFS header to pad data
-//
-BOOLEAN         VTFPresent = FALSE;
-BOOLEAN         SecondVTF = FALSE;
-
-//
-// Address related information
-//
-UINT64          Fv1BaseAddress        = 0;
-UINT64          Fv2BaseAddress        = 0;
-UINT64          Fv1EndAddress         = 0;
-UINT64          Fv2EndAddress         = 0;
-UINT32          Vtf1TotalSize         = SIZE_TO_OFFSET_PAL_A_END;
-UINT64          Vtf1LastStartAddress  = 0;
-UINT32          Vtf2TotalSize         = 0;
-UINT64          Vtf2LastStartAddress  = 0;
-
-UINT32          BufferToTop           = 0;
-
-//
-// IA32 Reset Vector Bin name
-//
-CHAR8           IA32BinFile[FILE_NAME_SIZE];
-
-//
-// Function Implementations
-//
-EFI_STATUS
-ConvertVersionInfo (
-  IN      CHAR8     *Str,
-  IN OUT  UINT8     *MajorVer,
-  IN OUT  UINT8     *MinorVer
-  )
-/*++
-Routine Description:
-
-  This function split version to major version and minor version
-
-Arguments:
-
-  Str      - String representing in form XX.XX
-  MajorVer - The major version
-  MinorVer - The minor version
-
-Returns:
-
-  EFI_SUCCESS  - The function completed successfully.
-
---*/
-{
-  CHAR8  TemStr[5] = "0000";
-  int    Major;
-  int    Minor;
-  UINTN Length;
-
-  Major = 0;
-  Minor = 0;
-
-  if (strstr (Str, ".") != NULL) {
-    sscanf (
-      Str,
-      "%02x.%02x",
-      &Major,
-      &Minor
-      );
-  } else {
-    Length = strlen(Str);
-    if (Length < 4) {
-      memcpy (TemStr + 4 - Length, Str, Length);
-    } else {
-      memcpy (TemStr, Str + Length - 4, 4);
-    }
-
-    sscanf (
-      TemStr,
-      "%02x%02x",
-      &Major,
-      &Minor
-      );
-  }
-
-  *MajorVer = (UINT8) Major;
-  *MinorVer = (UINT8) Minor;
-  return EFI_SUCCESS;
-}
-
-VOID
-TrimLine (
-  IN  CHAR8 *Line
-  )
-/*++
-Routine Description:
-
-  This function cleans up the line by removing all whitespace and
-  comments
-
-Arguments:
-
-  Line   - The pointer of the string
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 TmpLine[FILE_NAME_SIZE];
-  CHAR8 Char;
-  CHAR8 *Ptr0;
-  UINTN Index;
-  UINTN Index2;
-
-  //
-  // Change '#' to '//' for Comment style
-  //
-  if (((Ptr0 = strchr (Line, '#')) != NULL) || ((Ptr0 = strstr (Line, "//")) != NULL)) {
-    Line[Ptr0 - Line] = 0;
-  }
-
-  //
-  // Initialize counters
-  //
-  Index   = 0;
-  Index2  = 0;
-
-  while ((Char = Line[Index]) != 0) {
-    if ((Char != ' ') && (Char != '\t') && (Char != '\n') && (Char != '\r')) {
-      TmpLine[Index2++] = Char;
-    }
-    Index++;
-  }
-
-  TmpLine[Index2] = 0;
-  strcpy (Line, TmpLine);
-}
-
-VOID
-ValidLineCount (
-  IN  FILE *Fp
-  )
-/*++
-
-Routine Description:
-
-  This function calculated number of valid lines in a input file.
-
-Arguments:
-
-  Fp    - Pointer to a file handle which has been opened.
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 Buff[FILE_NAME_SIZE];
-  while (fgets(Buff, sizeof (Buff), Fp)) {
-    TrimLine (Buff);
-    if (Buff[0] == 0) {
-      continue;
-    }
-    ValidLineNum++;
-  }
-}
-
-EFI_STATUS
-ParseInputFile (
-  IN  FILE *Fp
-  )
-/*++
-
-Routine Description:
-
-  This function parses the input file and tokenize the string
-
-Arguments:
-
-  Fp    - Pointer to a file handle which has been opened.
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 *Token;
-  CHAR8 Buff[FILE_NAME_SIZE + 1];
-  CHAR8 Delimit[] = "=";
-
-  Buff [FILE_NAME_SIZE] = '\0';
-  Token = NULL;
-
-  while (fgets (Buff, FILE_NAME_SIZE, Fp) != NULL) {
-    TrimLine (Buff);
-    if (Buff[0] == 0) {
-      continue;
-    }
-    Token = strtok (Buff, Delimit);
-    while (Token != NULL) {
-      strcpy (*TokenStr, Token);
-      TokenStr ++;
-      Token = strtok (NULL, Delimit);
-    }
-  }
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-InitializeComps (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function initializes the relevant global variable which is being
-  used to store the information retrieved from INF file.  This also initializes
-  the VTF symbol file.
-
-Arguments:
-
-  None
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_OUT_OF_RESOURCES   - Malloc failed.
-
---*/
-{
-
-  FileListPtr = malloc (sizeof (PARSED_VTF_INFO));
-
-  if (FileListPtr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  FileListHeadPtr = FileListPtr;
-  memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
-  FileListPtr->NextVtfInfo = NULL;
-
-  remove (SymFileName);
-  return EFI_SUCCESS;
-}
-
-VOID
-ParseAndUpdateComponents (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function initializes the relevant global variable which is being
-  used to store the information retrieved from INF file.
-
-Arguments:
-
-  VtfInfo  - A pointer to the VTF Info Structure
-
-
-Returns:
-
-  None
-
---*/
-{
-  UINT64  StringValue;
-
-  while (*TokenStr != NULL && (strnicmp (*TokenStr, "COMP_NAME", 9) != 0)) {
-
-    if (strnicmp (*TokenStr, "COMP_LOC", 8) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "F", 1) == 0) {
-        VtfInfo->LocationType = FIRST_VTF;
-      } else if (strnicmp (*TokenStr, "S", 1) == 0) {
-        VtfInfo->LocationType = SECOND_VTF;
-      } else {
-        VtfInfo->LocationType = NONE;
-      }
-    } else if (strnicmp (*TokenStr, "COMP_TYPE", 9) == 0) {
-      TokenStr++;
-      if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
-        Error (NULL, 0, 5001, "Cannot get: \"0x%s\".", *TokenStr);
-        return ;
-      }
-
-      VtfInfo->CompType = (UINT8) StringValue;
-    } else if (strnicmp (*TokenStr, "COMP_VER", 8) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "-", 1) == 0) {
-        VtfInfo->VersionPresent = FALSE;
-        VtfInfo->MajorVer       = 0;
-        VtfInfo->MinorVer       = 0;
-      } else {
-        VtfInfo->VersionPresent = TRUE;
-        ConvertVersionInfo (*TokenStr, &VtfInfo->MajorVer, &VtfInfo->MinorVer);
-      }
-    } else if (strnicmp (*TokenStr, "COMP_BIN", 8) == 0) {
-      TokenStr++;
-      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-        Error (NULL, 0, 3000, "Invalid", "The 'COMP_BIN' name is too long.");
-        return ;
-      }
-      strncpy (VtfInfo->CompBinName, *TokenStr, FILE_NAME_SIZE - 1);
-      VtfInfo->CompBinName[FILE_NAME_SIZE - 1] = 0;
-    } else if (strnicmp (*TokenStr, "COMP_SYM", 8) == 0) {
-      TokenStr++;
-      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-        Error (NULL, 0, 3000, "Invalid", "The 'COMP_SYM' name is too long.");
-        return ;
-      }
-      strncpy (VtfInfo->CompSymName, *TokenStr, FILE_NAME_SIZE - 1);
-      VtfInfo->CompSymName[FILE_NAME_SIZE - 1] = 0;
-    } else if (strnicmp (*TokenStr, "COMP_SIZE", 9) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "-", 1) == 0) {
-        VtfInfo->PreferredSize  = FALSE;
-        VtfInfo->CompSize       = 0;
-      } else {
-        VtfInfo->PreferredSize = TRUE;
-        if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
-          Error (NULL, 0, 5001, "Parse error", "Cannot get: %s.", TokenStr);
-          return ;
-        }
-
-        VtfInfo->CompSize = (UINTN) StringValue;
-      }
-
-    } else if (strnicmp (*TokenStr, "COMP_CS", 7) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "1", 1) == 0) {
-        VtfInfo->CheckSumRequired = 1;
-      } else if (strnicmp (*TokenStr, "0", 1) == 0) {
-        VtfInfo->CheckSumRequired = 0;
-      } else {
-        Error (NULL, 0, 3000, "Invaild", "Bad value in INF file required field: Checksum, the value must be '0' or '1'.");
-      }
-    }
-
-    TokenStr++;
-    if (*TokenStr == NULL) {
-      break;
-    }
-  }
-}
-
-VOID
-InitializeInFileInfo (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function intializes the relevant global variable which is being
-  used to store the information retrieved from INF file.
-
-Arguments:
-
-  NONE
-
-Returns:
-
-  NONE
-
---*/
-{
-
-  SectionOptionFlag = 0;
-  SectionCompFlag   = 0;
-  TokenStr          = OrgStrTokPtr;
-
-  while (*TokenStr != NULL) {
-    if (strnicmp (*TokenStr, "[OPTIONS]", 9) == 0) {
-      SectionOptionFlag = 1;
-      SectionCompFlag   = 0;
-    }
-
-    if (strnicmp (*TokenStr, "[COMPONENTS]", 12) == 0) {
-      if (FileListPtr == NULL) {
-        FileListPtr = FileListHeadPtr;
-      }
-
-      SectionCompFlag   = 1;
-      SectionOptionFlag = 0;
-      TokenStr++;
-    }
-
-    if (SectionOptionFlag) {
-      if (stricmp (*TokenStr, "IA32_RST_BIN") == 0) {
-        TokenStr++;
-        if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-          Error (NULL, 0, 3000, "Invalid", "The 'IA32_RST_BIN' name is too long.");
-          break;
-        }
-        strncpy (IA32BinFile, *TokenStr, FILE_NAME_SIZE - 1);
-        IA32BinFile[FILE_NAME_SIZE - 1] = 0;
-      }
-    }
-
-    if (SectionCompFlag) {
-      if (stricmp (*TokenStr, "COMP_NAME") == 0) {
-        TokenStr++;
-        if (strlen (*TokenStr) >= COMPONENT_NAME_SIZE) {
-          Error (NULL, 0, 3000, "Invalid", "The 'COMP_NAME' name is too long.");
-          break;
-        }
-        strncpy (FileListPtr->CompName, *TokenStr, COMPONENT_NAME_SIZE - 1);
-        FileListPtr->CompName[COMPONENT_NAME_SIZE - 1] = 0;
-        TokenStr++;
-        ParseAndUpdateComponents (FileListPtr);
-      }
-
-      if (*TokenStr != NULL) {
-        FileListPtr->NextVtfInfo  = malloc (sizeof (PARSED_VTF_INFO));
-        if (FileListPtr->NextVtfInfo == NULL) {
-          Error (NULL, 0, 4003, "Resource", "Out of memory resources.", NULL);
-          break;
-        }
-        FileListPtr = FileListPtr->NextVtfInfo;
-        memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
-        FileListPtr->NextVtfInfo = NULL;
-        continue;
-      } else {
-        break;
-      }
-    }
-
-    TokenStr++;
-  }
-}
-
-EFI_STATUS
-GetVtfRelatedInfoFromInfFile (
-  IN FILE *FilePointer
-  )
-/*++
-
-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 VTF
-
-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 information
-  EFI_OUT_OF_RESOURCES  - Malloc Failed
-  EFI_SUCCESS           - The function completed successfully
-
---*/
-{
-  FILE        *Fp;
-  UINTN       Index;
-  UINTN       Index1;
-  EFI_STATUS  Status;
-
-  Status = EFI_SUCCESS;
-  Fp = FilePointer;
-  if (Fp == NULL) {
-    Error (NULL, 0, 2000, "Invalid parameter", "BSF INF file is invalid!");
-    return EFI_ABORTED;
-  }
-
-  ValidLineCount (Fp);
-
-  if (ValidLineNum == 0) {
-    Error (NULL, 0, 2000, "Invalid parameter", "File does not contain any valid information!");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  TokenStr = (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum + 1));
-
-  if (TokenStr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  memset (TokenStr, 0, (sizeof (UINTN) * (2 * ValidLineNum + 1)));
-  OrgStrTokPtr = TokenStr;
-
-  for (Index = 0; Index < (2 * ValidLineNum); Index++) {
-    *TokenStr = (CHAR8*)malloc (sizeof (CHAR8) * FILE_NAME_SIZE);
-
-    if (*TokenStr == NULL) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto ParseFileError;
-    }
-
-    memset (*TokenStr, 0, FILE_NAME_SIZE);
-    TokenStr++;
-  }
-
-  TokenStr  = OrgStrTokPtr;
-  fseek (Fp, 0L, SEEK_SET);
-
-  Status = InitializeComps ();
-
-  if (Status != EFI_SUCCESS) {
-    goto ParseFileError;
-  }
-
-  Status = ParseInputFile (Fp);
-  if (Status != EFI_SUCCESS) {
-    goto ParseFileError;
-  }
-
-  InitializeInFileInfo ();
-
-ParseFileError:
-
-  for (Index1 = 0; Index1 < Index; Index1 ++) {
-    free (OrgStrTokPtr[Index1]);
-  }
-
-  free (OrgStrTokPtr);
-
-  return Status;
-}
-
-VOID
-GetRelativeAddressInVtfBuffer (
-  IN      UINT64     Address,
-  IN OUT  UINTN      *RelativeAddress,
-  IN      LOC_TYPE   LocType
-  )
-/*++
-
-Routine Description:
-
-  This function checks for the address alignmnet for specified data boundary. In
-  case the address is not aligned, it returns FALSE and the amount of data in
-  terms of byte needed to adjust to get the boundary alignmnet. If data is
-  aligned, TRUE will be returned.
-
-Arguments:
-
-  Address             - The address of the flash map space
-  RelativeAddress     - The relative address of the Buffer
-  LocType             - The type of the VTF
-
-
-Returns:
-
-
---*/
-{
-  UINT64  TempAddress;
-  UINT8   *LocalBuff;
-
-  if (LocType == FIRST_VTF) {
-    LocalBuff         = (UINT8 *) Vtf1EndBuffer;
-    TempAddress       = Fv1EndAddress - Address;
-    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
-  } else {
-    LocalBuff         = (UINT8 *) Vtf2EndBuffer;
-    TempAddress       = Fv2EndAddress - Address;
-    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
-  }
-}
-
-EFI_STATUS
-GetComponentVersionInfo (
-  IN  OUT PARSED_VTF_INFO   *VtfInfo,
-  IN      UINT8             *Buffer
-  )
-/*++
-Routine Description:
-
-  This function will extract the version information from File
-
-Arguments:
-
-  VtfInfo  - A Pointer to the VTF Info Structure
-  Buffer   - A Pointer to type UINT8
-
-Returns:
-
-   EFI_SUCCESS           - The function completed successfully
-   EFI_INVALID_PARAMETER - The parameter is invalid
-
---*/
-{
-  UINT16      VersionInfo;
-  EFI_STATUS  Status;
-
-  switch (VtfInfo->CompType) {
-
-  case COMP_TYPE_FIT_PAL_A:
-  case COMP_TYPE_FIT_PAL_B:
-    memcpy (&VersionInfo, (Buffer + 8), sizeof (UINT16));
-    VtfInfo->MajorVer = (UINT8) ((VersionInfo & 0xFF00) >> 8);
-    VtfInfo->MinorVer = (UINT8) (VersionInfo & 0x00FF);
-    Status            = EFI_SUCCESS;
-    break;
-
-  default:
-    Status = EFI_INVALID_PARAMETER;
-    break;
-  }
-
-  return Status;
-}
-
-BOOLEAN
-CheckAddressAlignment (
-  IN      UINT64  Address,
-  IN      UINT64  AlignmentData,
-  IN OUT  UINT64  *AlignAdjustByte
-  )
-/*++
-
-Routine Description:
-
-  This function checks for the address alignmnet for specified data boundary. In
-  case the address is not aligned, it returns FALSE and the amount of data in
-  terms of byte needed to adjust to get the boundary alignmnet. If data is
-  aligned, TRUE will be returned.
-
-Arguments:
-
-  Address              - Pointer to buffer containing byte data of component.
-  AlignmentData        - DataSize for which address needed to be aligned
-  AlignAdjustByte      - Number of bytes needed to adjust alignment.
-
-Returns:
-
-  TRUE                 - Address is aligned to specific data size boundary
-  FALSE                - Address in not aligned to specified data size boundary
-                       - Add/Subtract AlignAdjustByte to aling the address.
-
---*/
-{
-  //
-  // Check if the assigned address is on address boundary. If not, it will
-  // return the remaining byte required to adjust the address for specified
-  // address boundary
-  //
-  *AlignAdjustByte = (Address % AlignmentData);
-
-  if (*AlignAdjustByte == 0) {
-    return TRUE;
-  } else {
-    return FALSE;
-  }
-}
-
-EFI_STATUS
-GetFitTableStartAddress (
-  IN OUT  FIT_TABLE   **FitTable
-  )
-/*++
-
-Routine Description:
-
-  Get the FIT table start address in VTF Buffer
-
-Arguments:
-
-  FitTable    - Pointer to available fit table where new component can be added
-
-Returns:
-
-  EFI_SUCCESS - The function completed successfully
-
---*/
-{
-  UINT64  FitTableAdd;
-  UINT64  FitTableAddOffset;
-  UINTN   RelativeAddress;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File. The relative address will be
-  // the address of fit table VTF buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  //
-  // The FitTableAdd is the extracted Itanium based address pointing to FIT
-  // table. The relative address will return its actual location in VTF
-  // Buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  *FitTable = (FIT_TABLE *) RelativeAddress;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-GetNextAvailableFitPtr (
-  IN  FIT_TABLE   **FitPtr
-  )
-/*++
-
-Routine Description:
-
-  Get the FIT table address and locate the free space in fit where we can add
-  new component. In this process, this function locates the fit table using
-  Fit pointer in Itanium-based address map (as per Intel?Itanium(TM) SAL spec)
-  and locate the available location in FIT table to be used by new components.
-  If there are any Fit table which areg not being used contains ComponentType
-  field as 0x7F. If needed we can change this and spec this out.
-
-Arguments:
-
-  FitPtr    - Pointer to available fit table where new component can be added
-
-Returns:
-
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  FIT_TABLE *TmpFitPtr;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddOffset;
-  UINTN     Index;
-  UINTN     NumFitComponents;
-  UINTN     RelativeAddress;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File. The relative address will be
-  // the address of fit table VTF buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  //
-  // The FitTableAdd is the extracted Itanium based address pointing to FIT
-  // table. The relative address will return its actual location in VTF
-  // Buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  TmpFitPtr         = (FIT_TABLE *) RelativeAddress;
-  NumFitComponents  = TmpFitPtr->CompSize;
-  *FitPtr           = NULL;
-
-  for (Index = 0; Index < NumFitComponents; Index++) {
-    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) == COMP_TYPE_FIT_UNUSED) {
-      *FitPtr = TmpFitPtr;
-      break;
-    }
-
-    TmpFitPtr++;
-  }
-
-  return EFI_SUCCESS;
-}
-
-int
-CompareItems (
-  IN const VOID  *Arg1,
-  IN const VOID  *Arg2
-  )
-/*++
-
-Routine Description:
-
-    This function is used by qsort to sort the FIT table based upon Component
-    Type in their incresing order.
-
-Arguments:
-
-    Arg1  -   Pointer to Arg1
-    Arg2  -   Pointer to Arg2
-
-Returns:
-
-    None
-
---*/
-{
-  if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) > (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
-    return 1;
-  } else if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) < (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
-    return -1;
-  } else {
-    return 0;
-  }
-}
-
-VOID
-SortFitTable (
-  IN  VOID
-  )
-/*++
-
-Routine Description:
-
-    This function is used by qsort to sort the FIT table based upon Component
-    Type in their incresing order.
-
-Arguments:
-
-    VOID
-
-Returns:
-
-    None
-
---*/
-{
-  FIT_TABLE *FitTable;
-  FIT_TABLE *TmpFitPtr;
-  UINTN     NumFitComponents;
-  UINTN     Index;
-
-  GetFitTableStartAddress (&FitTable);
-  TmpFitPtr         = FitTable;
-  NumFitComponents  = 0;
-  for (Index = 0; Index < FitTable->CompSize; Index++) {
-    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) != COMP_TYPE_FIT_UNUSED) {
-      NumFitComponents += 1;
-    }
-    TmpFitPtr++;
-  }
-  qsort ((VOID *) FitTable, NumFitComponents, sizeof (FIT_TABLE), CompareItems);
-}
-
-VOID
-UpdateFitEntryForFwVolume (
-  IN  UINT64  Size
-  )
-/*++
-
-Routine Description:
-
-  This function updates the information about Firmware Volume  in FIT TABLE.
-  This FIT table has to be immediately below the PAL_A Start and it contains
-  component type and address information. Other information can't be
-  created this time so we would need to fix it up..
-
-
-Arguments:
-
-  Size   - Firmware Volume Size
-
-Returns:
-
-  VOID
-
---*/
-{
-  FIT_TABLE *CompFitPtr;
-  UINTN     RelativeAddress;
-
-  //
-  // FV Fit table will be located at PAL_A Startaddress - 16 byte location
-  //
-  Vtf1LastStartAddress -= 0x10;
-  Vtf1TotalSize += 0x10;
-
-  GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-
-  CompFitPtr              = (FIT_TABLE *) RelativeAddress;
-  CompFitPtr->CompAddress = Fv1BaseAddress;
-
-  //
-  // Since we don't have any information about its location in Firmware Volume,
-  // initialize address to 0. This will be updated once Firmware Volume is
-  // being build and its current address will be fixed in FIT table. Currently
-  // we haven't implemented it so far and working on architectural clarafication
-  //
-  //
-  // Firmware Volume Size in 16 byte block
-  //
-  CompFitPtr->CompSize = ((UINT32) Size) / 16;
-
-  //
-  // Since Firmware Volume does not exist by the time we create this FIT info
-  // this should be fixedup from Firmware Volume creation tool. We haven't
-  // worked out a method so far.
-  //
-  CompFitPtr->CompVersion = MAKE_VERSION (0, 0);
-
-  //
-  // Since we don't have any info about this file, we are making sure that
-  // checksum is not needed.
-  //
-  CompFitPtr->CvAndType = CV_N_TYPE (0, COMP_TYPE_FIT_FV_BOOT);
-
-  //
-  // Since non VTF component will reside outside the VTF, we will not have its
-  // binary image while creating VTF, hence we will not perform checksum at
-  // this time. Once Firmware Volume is being created which will contain this
-  // VTF, it will fix the FIT table for all the non VTF component and hence
-  // checksum
-  //
-  CompFitPtr->CheckSum = 0;
-}
-
-EFI_STATUS
-UpdateFitEntryForNonVTFComp (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function updates the information about non VTF component in FIT TABLE.
-  Since non VTF componets binaries are not part of VTF binary, we would still
-  be required to update its location information in Firmware Volume, inside
-  FIT table.
-
-Arguments:
-
-  VtfInfo    - Pointer to VTF Info Structure
-
-Returns:
-
-  EFI_ABORTED  - The function fails to update the component in FIT
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  FIT_TABLE *CompFitPtr;
-
-  //
-  // Scan the FIT table for available space
-  //
-  GetNextAvailableFitPtr (&CompFitPtr);
-  if (CompFitPtr == NULL) {
-    Error (NULL, 0, 5003, "Invalid", "Can't update this component in FIT");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Since we don't have any information about its location in Firmware Volume,
-  // initialize address to 0. This will be updated once Firmware Volume is
-  // being build and its current address will be fixed in FIT table
-  //
-  CompFitPtr->CompAddress = 0;
-  CompFitPtr->CompSize    = VtfInfo->CompSize;
-  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-
-  //
-  // Since non VTF component will reside outside the VTF, we will not have its
-  // binary image while creating VTF, hence we will not perform checksum at
-  // this time. Once Firmware Volume is being created which will contain this
-  // VTF, it will fix the FIT table for all the non VTF component and hence
-  // checksum
-  //
-  CompFitPtr->CheckSum = 0;
-
-  //
-  // Fit Type is FV_BOOT which means Firmware Volume, we initialize this to base
-  // address of Firmware Volume in which this VTF will be attached.
-  //
-  if ((CompFitPtr->CvAndType & 0x7F) == COMP_TYPE_FIT_FV_BOOT) {
-    CompFitPtr->CompAddress = Fv1BaseAddress;
-  }
-
-  return EFI_SUCCESS;
-}
-
-//
-// !!!WARNING
-// This function is updating the SALE_ENTRY in Itanium address space as per SAL
-// spec. SALE_ENTRY is being read from SYM file of PEICORE. Once the PEI
-// CORE moves in Firmware Volume, we would need to modify this function to be
-// used with a API which will detect PEICORE component while building Firmware
-// Volume and update its entry in FIT table as well as in Itanium address space
-// as per Intel?Itanium(TM) SAL address space
-//
-EFI_STATUS
-UpdateEntryPoint (
-  IN  PARSED_VTF_INFO   *VtfInfo,
-  IN  UINT64            *CompStartAddress
-  )
-/*++
-
-Routine Description:
-
-  This function updated the architectural entry point in IPF, SALE_ENTRY.
-
-Arguments:
-
-  VtfInfo            - Pointer to VTF Info Structure
-  CompStartAddress   - Pointer to Component Start Address
-
-Returns:
-
-  EFI_INVALID_PARAMETER  - The parameter is invalid
-  EFI_SUCCESS            - The function completed successfully
-
---*/
-{
-  UINTN   RelativeAddress;
-  UINT64  SalEntryAdd;
-  FILE    *Fp;
-  UINTN   Offset;
-
-  CHAR8   Buff[FILE_NAME_SIZE];
-  CHAR8   Buff1[10];
-  CHAR8   Buff2[10];
-  CHAR8   OffsetStr[30];
-  CHAR8   Buff3[10];
-  CHAR8   Buff4[10];
-  CHAR8   Buff5[10];
-  CHAR8   Token[50];
-  CHAR8   FormatString[MAX_LINE_LEN];
-
-  Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompSymName);
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Generate the format string for fscanf
-  //
-  sprintf (
-    FormatString,
-    "%%%us %%%us %%%us %%%us %%%us %%%us %%%us",
-    (unsigned) sizeof (Buff1) - 1,
-    (unsigned) sizeof (Buff2) - 1,
-    (unsigned) sizeof (OffsetStr) - 1,
-    (unsigned) sizeof (Buff3) - 1,
-    (unsigned) sizeof (Buff4) - 1,
-    (unsigned) sizeof (Buff5) - 1,
-    (unsigned) sizeof (Token) - 1
-    );
-
-  while (fgets (Buff, sizeof (Buff), Fp) != NULL) {
-    fscanf (
-      Fp,
-      FormatString,
-      Buff1,
-      Buff2,
-      OffsetStr,
-      Buff3,
-      Buff4,
-      Buff5,
-      Token
-      );
-    if (strnicmp (Token, "SALE_ENTRY", 10) == 0) {
-      break;
-    }
-  }
-
-  Offset = strtoul (OffsetStr, NULL, 16);
-
-  *CompStartAddress += Offset;
-  SalEntryAdd = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT);
-
-  GetRelativeAddressInVtfBuffer (SalEntryAdd, &RelativeAddress, FIRST_VTF);
-
-  memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));
-
-  if (Fp != NULL) {
-    fclose (Fp);
-  }
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-CreateAndUpdateComponent (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function reads the binary file for each components and update them
-  in VTF Buffer as well as in FIT table. If the component is located in non
-  VTF area, only the FIT table address will be updated
-
-Arguments:
-
-  VtfInfo    - 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.
-                      (c) Fail to get the FIT table address.
-
-  EFI_INVALID_PARAMETER     Value returned from call to UpdateEntryPoint()
-  EFI_OUT_OF_RESOURCES      Memory allocation failure.
-
---*/
-{
-  EFI_STATUS  Status;
-  UINT64      CompStartAddress;
-  UINT64      FileSize;
-  UINT64      NumAdjustByte;
-  UINT8       *Buffer;
-  FILE        *Fp;
-  FIT_TABLE   *CompFitPtr;
-  BOOLEAN     Aligncheck;
-
-  if (VtfInfo->LocationType == NONE) {
-    UpdateFitEntryForNonVTFComp (VtfInfo);
-    return EFI_SUCCESS;
-  }
-
-  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
-
-    //
-    // BUGBUG: Satish to correct
-    //
-    FileSize -= SIZE_OF_PAL_HEADER;
-  }
-
-  if (VtfInfo->PreferredSize) {
-    if (FileSize > VtfInfo->CompSize) {
-      fclose (Fp);
-      Error (NULL, 0, 2000, "Invalid parameter", "The component size is more than specified size.");
-      return EFI_ABORTED;
-    }
-
-    FileSize = VtfInfo->CompSize;
-  }
-
-  Buffer = malloc ((UINTN) FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Buffer, 0, (UINTN) FileSize);
-
-  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
-
-    //
-    // Read first 64 bytes of PAL header and use it to find version info
-    //
-    fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
-
-    //
-    // PAL header contains the version info. Currently, we will use the header
-    // to read version info and then discard.
-    //
-    if (!VtfInfo->VersionPresent) {
-      GetComponentVersionInfo (VtfInfo, Buffer);
-    }
-  }
-
-  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
-  fclose (Fp);
-
-  //
-  // If it is non PAL_B component, pass the entire buffer to get the version
-  // info and implement any specific case inside GetComponentVersionInfo.
-  //
-  if (VtfInfo->CompType != COMP_TYPE_FIT_PAL_B) {
-    if (!VtfInfo->VersionPresent) {
-      GetComponentVersionInfo (VtfInfo, Buffer);
-    }
-  }
-
-  if (VtfInfo->LocationType == SECOND_VTF) {
-
-    CompStartAddress = (Vtf2LastStartAddress - FileSize);
-  } else {
-    CompStartAddress = (Vtf1LastStartAddress - FileSize);
-  }
-
-  if (VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) {
-    Aligncheck = CheckAddressAlignment (CompStartAddress, 32 * 1024, &NumAdjustByte);
-  } else {
-    Aligncheck = CheckAddressAlignment (CompStartAddress, 8, &NumAdjustByte);
-  }
-
-  if (!Aligncheck) {
-    CompStartAddress -= NumAdjustByte;
-  }
-
-  if (VtfInfo->LocationType == SECOND_VTF && SecondVTF == TRUE) {
-    Vtf2LastStartAddress = CompStartAddress;
-    Vtf2TotalSize += (UINT32) (FileSize + NumAdjustByte);
-    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, SECOND_VTF);
-  } else if (VtfInfo->LocationType == FIRST_VTF) {
-    Vtf1LastStartAddress = CompStartAddress;
-    Vtf1TotalSize += (UINT32) (FileSize + NumAdjustByte);
-    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, FIRST_VTF);
-  } else {
-    free (Buffer);
-    Error (NULL, 0, 2000,"Invalid Parameter", "There's component in second VTF so second BaseAddress and Size must be specified!");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (EFI_ERROR (Status)) {
-    free (Buffer);
-    return EFI_ABORTED;
-  }
-
-  GetNextAvailableFitPtr (&CompFitPtr);
-  if (CompFitPtr == NULL) {
-    free (Buffer);
-    return EFI_ABORTED;
-  }
-
-  CompFitPtr->CompAddress = CompStartAddress | IPF_CACHE_BIT;
-  if ((FileSize % 16) != 0) {
-    free (Buffer);
-    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
-    return EFI_INVALID_PARAMETER;
-  }
-  //assert ((FileSize % 16) == 0);
-  CompFitPtr->CompSize    = (UINT32) (FileSize / 16);
-  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-  if (VtfInfo->CheckSumRequired) {
-    CompFitPtr->CheckSum  = 0;
-    CompFitPtr->CheckSum  = CalculateChecksum8 (Buffer, (UINTN) FileSize);
-  }
-
-  //
-  // Free the buffer
-  //
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  //
-  // Update the SYM file for this component based on it's start address.
-  //
-  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
-  if (EFI_ERROR (Status)) {
-
-    //
-    // At this time, SYM files are not required, so continue on error.
-    //
-  }
-
-  // !!!!!!!!!!!!!!!!!!!!!
-  // BUGBUG:
-  // This part of the code is a temporary line since PEICORE is going to be inside
-  // VTF till we work out how to determine the SALE_ENTRY through it. We will need
-  // to clarify so many related questions
-  // !!!!!!!!!!!!!!!!!!!!!!!
-
-  if (VtfInfo->CompType == COMP_TYPE_FIT_PEICORE) {
-    Status = UpdateEntryPoint (VtfInfo, &CompStartAddress);
-  }
-
-  return Status;
-}
-
-EFI_STATUS
-CreateAndUpdatePAL_A (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function reads the binary file for each components and update them
-  in VTF Buffer as well as FIT table
-
-Arguments:
-
-  VtfInfo    - 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_OUT_OF_RESOURCES  - Memory allocation failed.
-
---*/
-{
-  EFI_STATUS  Status;
-  UINT64      PalStartAddress;
-  UINT64      AbsAddress;
-  UINTN       RelativeAddress;
-  UINT64      FileSize;
-  UINT8       *Buffer;
-  FILE        *Fp;
-  FIT_TABLE   *PalFitPtr;
-
-  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-  if (FileSize < 64) {
-    fclose (Fp);
-    Error (NULL, 0, 2000, "Invalid parameter", "PAL_A bin header is 64 bytes, so the Bin size must be larger than 64 bytes!");
-    return EFI_INVALID_PARAMETER;
-  }
-  FileSize -= SIZE_OF_PAL_HEADER;
-
-
-  if (VtfInfo->PreferredSize) {
-    if (FileSize > VtfInfo->CompSize) {
-      fclose (Fp);
-      Error (NULL, 0, 2000, "Invalid parameter", "The PAL_A Size is more than the specified size.");
-      return EFI_ABORTED;
-    }
-
-    FileSize = VtfInfo->CompSize;
-  }
-
-  Buffer = malloc ((UINTN) FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Buffer, 0, (UINTN) FileSize);
-
-  //
-  // Read, Get version Info and discard the PAL header.
-  //
-  fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
-
-  //
-  // Extract the version info from header of PAL_A. Once done, discrad this buffer
-  //
-  if (!VtfInfo->VersionPresent) {
-    GetComponentVersionInfo (VtfInfo, Buffer);
-  }
-
-  //
-  // Read PAL_A file in a buffer
-  //
-  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
-  fclose (Fp);
-
-  PalStartAddress       = Fv1EndAddress - (SIZE_TO_OFFSET_PAL_A_END + FileSize);
-  Vtf1LastStartAddress  = PalStartAddress;
-  Vtf1TotalSize += (UINT32) FileSize;
-  Status      = UpdateVtfBuffer (PalStartAddress, Buffer, FileSize, FIRST_VTF);
-
-  AbsAddress  = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
-  GetRelativeAddressInVtfBuffer (AbsAddress, &RelativeAddress, FIRST_VTF);
-  PalFitPtr               = (FIT_TABLE *) RelativeAddress;
-  PalFitPtr->CompAddress  = PalStartAddress | IPF_CACHE_BIT;
-  //assert ((FileSize % 16) == 0);
-  if ((FileSize % 16) != 0) {
-    free (Buffer);
-    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  PalFitPtr->CompSize     = (UINT32) (FileSize / 16);
-  PalFitPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  PalFitPtr->CvAndType    = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-  if (VtfInfo->CheckSumRequired) {
-    PalFitPtr->CheckSum = 0;
-    PalFitPtr->CheckSum = CalculateChecksum8 (Buffer, (UINTN) FileSize);
-  }
-
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  //
-  // Update the SYM file for this component based on it's start address.
-  //
-  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
-  if (EFI_ERROR (Status)) {
-
-    //
-    // At this time, SYM files are not required, so continue on error.
-    //
-  }
-
-  return Status;
-}
-
-EFI_STATUS
-CreateFitTableAndInitialize (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function creates and intializes FIT table which would be used to
-  add component info inside this
-
-Arguments:
-
-  VtfInfo    - Pointer to Parsed Info
-
-Returns:
-
-  EFI_ABORTED  - Aborted due to no size information
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  UINT64    PalFitTableAdd;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddressOffset;
-  FIT_TABLE *PalFitPtr;
-  FIT_TABLE *FitStartPtr;
-  UINTN     NumFitComp;
-  UINTN     RelativeAddress;
-  UINTN     Index;
-
-  if (!VtfInfo->PreferredSize) {
-    Error (NULL, 0, 2000, "Invalid parameter", "FIT could not be allocated because there is no size information.");
-    return EFI_ABORTED;
-  }
-
-  if ((VtfInfo->CompSize % 16) != 0) {
-    Error (NULL, 0, 2000, "Invalid parameter", "Invalid FIT Table Size, it is not a multiple of 16 bytes. Please correct the size.");
-  }
-
-  PalFitTableAdd = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
-  GetRelativeAddressInVtfBuffer (PalFitTableAdd, &RelativeAddress, FIRST_VTF);
-  PalFitPtr             = (FIT_TABLE *) RelativeAddress;
-  PalFitTableAdd        = (PalFitPtr->CompAddress - VtfInfo->CompSize);
-
-  FitTableAdd           = (PalFitPtr->CompAddress - 0x10) - VtfInfo->CompSize;
-  FitTableAddressOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-  GetRelativeAddressInVtfBuffer (FitTableAddressOffset, &RelativeAddress, FIRST_VTF);
-  *(UINT64 *) RelativeAddress = FitTableAdd;
-
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  //
-  // Update Fit Table with FIT Signature and FIT info in first 16 bytes.
-  //
-  FitStartPtr = (FIT_TABLE *) RelativeAddress;
-
-  strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "
-  assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);
-  FitStartPtr->CompSize     = (VtfInfo->CompSize & 0x00FFFFFF) / 16;
-  FitStartPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-
-  //
-  // BUGBUG: If a checksum is required, add code to checksum the FIT table.  Also
-  // determine what to do for things like the FV component that aren't easily checksummed.
-  // The checksum will be done once we are done with all the componet update in the FIT
-  // table
-  //
-  FitStartPtr->CvAndType  = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-
-  NumFitComp              = FitStartPtr->CompSize;
-
-  FitStartPtr++;
-
-  //
-  // Intialize remaining FIT table space to UNUSED fit component type
-  // so that when we need to create a FIT entry for a component, we can
-  // locate a free one and use it.
-  //
-  for (Index = 0; Index < (NumFitComp - 1); Index++) {
-    FitStartPtr->CvAndType = 0x7F;  // Initialize all with UNUSED
-    FitStartPtr++;
-  }
-
-  Vtf1TotalSize += VtfInfo->CompSize;
-  Vtf1LastStartAddress -= VtfInfo->CompSize;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-WriteVtfBinary (
-  IN CHAR8     *FileName,
-  IN UINT32    VtfSize,
-  IN LOC_TYPE  LocType
-  )
-/*++
-
-Routine Description:
-
-  Write Firmware Volume from memory to a file.
-
-Arguments:
-
-  FileName     - Output File Name which needed to be created/
-  VtfSize      - FileSize
-  LocType      - The type of the VTF
-
-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
-
---*/
-{
-  FILE  *Fp;
-  UINTN NumByte;
-  VOID  *VtfBuffer;
-  UINTN RelativeAddress;
-
-  if (LocType == FIRST_VTF) {
-    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-    VtfBuffer = (VOID *) RelativeAddress;
-  } else {
-    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
-    VtfBuffer = (VOID *) RelativeAddress;
-  }
-
-  Fp = fopen (LongFilePath (FileName), "wb");
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", FileName);
-    return EFI_ABORTED;
-  }
-
-  NumByte = fwrite (VtfBuffer, sizeof (UINT8), (UINTN) VtfSize, Fp);
-
-  if (Fp) {
-    fclose (Fp);
-  }
-
-  if (NumByte != (sizeof (UINT8) * VtfSize)) {
-    Error (NULL, 0, 0002, "Error writing file", FileName);
-    return EFI_ABORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
-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: First or Second
-
-Returns:
-
-  EFI_ABORTED  - The input parameter is error
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  UINT8 *LocalBufferPtrToWrite;
-
-  if (LocType == FIRST_VTF) {
-    if ((StartAddress | IPF_CACHE_BIT) < (Vtf1LastStartAddress | IPF_CACHE_BIT)) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Start Address is less than the VTF start address.");
-      return EFI_ABORTED;
-    }
-
-    LocalBufferPtrToWrite = (UINT8 *) Vtf1EndBuffer;
-
-    LocalBufferPtrToWrite -= (Fv1EndAddress - StartAddress);
-
-  } else {
-
-    if ((StartAddress | IPF_CACHE_BIT) < (Vtf2LastStartAddress | IPF_CACHE_BIT)) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Error StartAddress");
-      return EFI_ABORTED;
-    }
-    LocalBufferPtrToWrite = (UINT8 *) Vtf2EndBuffer;
-    LocalBufferPtrToWrite -= (Fv2EndAddress - StartAddress);
-  }
-
-  memcpy (LocalBufferPtrToWrite, Buffer, (UINTN) DataSize);
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-UpdateFfsHeader (
-  IN UINT32         TotalVtfSize,
-  IN LOC_TYPE       LocType
-  )
-/*++
-
-Routine Description:
-
-  Update the Firmware Volume Buffer with requested buffer data
-
-Arguments:
-
-  TotalVtfSize     - Size of the VTF
-  Fileoffset       - The start of the file relative to the start of the FV.
-  LocType          - The type of the VTF
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_INVALID_PARAMETER  - The Ffs File Header Pointer is NULL
-
---*/
-{
-  EFI_FFS_FILE_HEADER *FileHeader;
-  UINTN               RelativeAddress;
-  EFI_GUID            EfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;
-
-  //
-  // Find the VTF file header location
-  //
-  if (LocType == FIRST_VTF) {
-    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
-  } else {
-    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
-    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
-  }
-
-  if (FileHeader == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // write header
-  //
-  memset (FileHeader, 0, sizeof (EFI_FFS_FILE_HEADER));
-  memcpy (&FileHeader->Name, &EfiFirmwareVolumeTopFileGuid, sizeof (EFI_GUID));
-  FileHeader->Type        = EFI_FV_FILETYPE_RAW;
-  FileHeader->Attributes  = FFS_ATTRIB_CHECKSUM;
-
-  //
-  // Now FileSize includes the EFI_FFS_FILE_HEADER
-  //
-  FileHeader->Size[0] = (UINT8) (TotalVtfSize & 0x000000FF);
-  FileHeader->Size[1] = (UINT8) ((TotalVtfSize & 0x0000FF00) >> 8);
-  FileHeader->Size[2] = (UINT8) ((TotalVtfSize & 0x00FF0000) >> 16);
-
-  //
-  // Fill in checksums and state, all three must be zero for the checksums.
-  //
-  FileHeader->IntegrityCheck.Checksum.Header  = 0;
-  FileHeader->IntegrityCheck.Checksum.File    = 0;
-  FileHeader->State                           = 0;
-  FileHeader->IntegrityCheck.Checksum.Header  = CalculateChecksum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));
-  FileHeader->IntegrityCheck.Checksum.File    = CalculateChecksum8 ((UINT8 *) (FileHeader + 1), TotalVtfSize - sizeof (EFI_FFS_FILE_HEADER));
-  FileHeader->State                           = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID | EFI_FILE_DATA_VALID;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-ValidateAddressAndSize (
-  IN  UINT64  BaseAddress,
-  IN  UINT64  FwVolSize
-  )
-/*++
-
-Routine Description:
-
-  Update the Firmware Volume Buffer with requested buffer data
-
-Arguments:
-
-  BaseAddress    - Base address for the Fw Volume.
-
-  FwVolSize      - Total Size of the FwVolume to which VTF will be attached..
-
-Returns:
-
-  EFI_SUCCESS     - The function completed successfully
-  EFI_UNSUPPORTED - The input parameter is error
-
---*/
-{
-  if ((FwVolSize > 0x40) && ((BaseAddress + FwVolSize) % 8 == 0)) {
-    return EFI_SUCCESS;
-  }
-
-  return EFI_UNSUPPORTED;
-}
-
-EFI_STATUS
-UpdateIA32ResetVector (
-  IN  CHAR8   *FileName,
-  IN  UINT64  FirstFwVSize
-  )
-/*++
-
-Routine Description:
-
-  Update the 16 byte IA32 Reset vector to maintain the compatibility
-
-Arguments:
-
-  FileName     - Binary file name which contains the IA32 Reset vector info..
-  FirstFwVSize - Total Size of the FwVolume to which VTF will be attached..
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_ABORTED            - Invalid File Size
-  EFI_INVALID_PARAMETER  - Bad File Name
-  EFI_OUT_OF_RESOURCES   - Memory allocation failed.
-
---*/
-{
-  UINT8 *Buffer;
-  UINT8 *LocalVtfBuffer;
-  UINTN FileSize;
-  FILE  *Fp;
-
-  if (!strcmp (FileName, "")) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Fp = fopen (LongFilePath (FileName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", FileName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-
-  if (FileSize > 16) {
-    fclose (Fp);
-    return EFI_ABORTED;
-  }
-
-  Buffer = malloc (FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  fread (Buffer, sizeof (UINT8), FileSize, Fp);
-
-  LocalVtfBuffer  = (UINT8 *) Vtf1EndBuffer - SIZE_IA32_RESET_VECT;
-  memcpy (LocalVtfBuffer, Buffer, FileSize);
-
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  if (Fp != NULL) {
-    fclose (Fp);
-  }
-  return EFI_SUCCESS;
-}
-
-VOID
-CleanUpMemory (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function cleans up any allocated buffer
-
-Arguments:
-
-  NONE
-
-Returns:
-
-  NONE
-
---*/
-{
-  PARSED_VTF_INFO *TempFileListPtr;
-
-  if (Vtf1Buffer) {
-    free (Vtf1Buffer);
-  }
-
-  if (Vtf2Buffer) {
-    free (Vtf2Buffer);
-  }
-
-  //
-  // Cleanup the buffer which was allocated to read the file names from FV.INF
-  //
-  FileListPtr = FileListHeadPtr;
-  while (FileListPtr != NULL) {
-    TempFileListPtr = FileListPtr->NextVtfInfo;
-    free (FileListPtr);
-    FileListPtr = TempFileListPtr;
-  }
-}
-
-EFI_STATUS
-ProcessAndCreateVtf (
-  IN  UINT64  Size
-  )
-/*++
-
-Routine Description:
-
-  This function process the link list created during INF file parsing
-  and create component in VTF and updates its info in FIT table
-
-Arguments:
-
-  Size   - Size of the Firmware Volume of which, this VTF belongs to.
-
-Returns:
-
-  EFI_UNSUPPORTED - Unknown FIT type
-  EFI_SUCCESS     - The function completed successfully
-
---*/
-{
-  EFI_STATUS      Status;
-  PARSED_VTF_INFO *ParsedInfoPtr;
-
-  Status        = EFI_SUCCESS;
-
-  ParsedInfoPtr = FileListHeadPtr;
-
-  while (ParsedInfoPtr != NULL) {
-
-    switch (ParsedInfoPtr->CompType) {
-    //
-    // COMP_TYPE_FIT_HEADER is a special case, hence handle it here
-    //
-    case COMP_TYPE_FIT_HEADER:
-      //COMP_TYPE_FIT_HEADER          0x00
-      Status = CreateFitTableAndInitialize (ParsedInfoPtr);
-      break;
-
-    //
-    // COMP_TYPE_FIT_PAL_A is a special case, hence handle it here
-    //
-    case COMP_TYPE_FIT_PAL_A:
-      //COMP_TYPE_FIT_PAL_A           0x0F
-      Status = CreateAndUpdatePAL_A (ParsedInfoPtr);
-
-      //
-      // Based on VTF specification, once the PAL_A component has been written,
-      // update the Firmware Volume info as FIT table. This will be utilized
-      // to extract the Firmware Volume Start address where this VTF will be
-      // of part.
-      //
-      if (Status == EFI_SUCCESS) {
-        UpdateFitEntryForFwVolume (Size);
-      }
-      break;
-
-    case COMP_TYPE_FIT_FV_BOOT:
-      //COMP_TYPE_FIT_FV_BOOT         0x7E
-      //
-      // Since FIT entry for Firmware Volume has been created and it is
-      // located at (PAL_A start - 16 byte). So we will not process any
-      // Firmware Volume related entry from INF file
-      //
-      Status = EFI_SUCCESS;
-      break;
-
-    default:
-      //
-      // Any other component type should be handled here. This will create the
-      // image in specified VTF and create appropriate entry about this
-      // component in FIT Entry.
-      //
-      Status = CreateAndUpdateComponent (ParsedInfoPtr);
-      if (EFI_ERROR (Status)) {
-        Error (NULL, 0, 0002, "Error updating component", ParsedInfoPtr->CompName);
-        return EFI_ABORTED;
-      } else {
-      break;}
-    }
-
-    ParsedInfoPtr = ParsedInfoPtr->NextVtfInfo;
-  }
-  return Status;
-}
-
-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
-  fp             - The pointer to BSF inf file
-
-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  Status;
-  FILE            *VtfFP;
-
-  Status          = EFI_UNSUPPORTED;
-  VtfFP = fp;
-
-  if (StartAddress2 == 0) {
-    SecondVTF = FALSE;
-  } else {
-    SecondVTF = TRUE;
-  }
-
-  Fv1BaseAddress        = StartAddress1;
-  Fv1EndAddress         = Fv1BaseAddress + Size1;
-  if (Fv1EndAddress != 0x100000000ULL || Size1 < 0x100000) {
-    Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
-    if (Size1 < 0x100000) {
-      Error (NULL, 0, 2000, "Invalid parameter", "The FwVolumeSize must be larger than 1M!");
-    } else if (SecondVTF != TRUE) {
-      Error (NULL, 0, 2000, "Invalid parameter", "BaseAddress + FwVolumeSize must equal 0x100000000!");
-    }
-    Usage();
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // The image buffer for the First VTF
-  //
-  Vtf1Buffer = malloc ((UINTN) Size1);
-  if (Vtf1Buffer == NULL) {
-    Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Vtf1Buffer, 0x00, (UINTN) Size1);
-  Vtf1EndBuffer         = (UINT8 *) Vtf1Buffer + Size1;
-  Vtf1LastStartAddress  = Fv1EndAddress | IPF_CACHE_BIT;
-
-  if (SecondVTF) {
-    Fv2BaseAddress        = StartAddress2;
-    Fv2EndAddress         = Fv2BaseAddress + Size2;
-    if (Fv2EndAddress != StartAddress1) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
-      if (SecondVTF == TRUE) {
-        Error (NULL, 0, 2000, "Invalid parameter", "FirstBaseAddress + FirstFwVolumeSize must equal 0x100000000!");
-        Error (NULL, 0, 2000, "Invalid parameter", "SecondBaseAddress + SecondFwVolumeSize must equal FirstBaseAddress!");
-      }
-      Usage();
-      return EFI_INVALID_PARAMETER;
-    }
-
-    //
-    // The image buffer for the second VTF
-    //
-    Vtf2Buffer = malloc ((UINTN) Size2);
-    if (Vtf2Buffer == NULL) {
-      Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
-      return EFI_OUT_OF_RESOURCES;
-    }
-    memset (Vtf2Buffer, 0x00, (UINTN) Size2);
-    Vtf2EndBuffer         = (UINT8 *) Vtf2Buffer + Size2;
-    Vtf2LastStartAddress  = Fv2EndAddress | IPF_CACHE_BIT;
-  }
-
-  Status = GetVtfRelatedInfoFromInfFile (VtfFP);
-
-  if (Status != EFI_SUCCESS) {
-    Error (NULL, 0, 0003, "Error parsing file", "the input file.");
-    CleanUpMemory ();
-    return Status;
-  }
-
-  Status = ProcessAndCreateVtf (Size1);
-  if (Status != EFI_SUCCESS) {
-    CleanUpMemory ();
-    return Status;
-  }
-
-  if (SectionOptionFlag) {
-    Status = UpdateIA32ResetVector (IA32BinFile, Vtf1TotalSize);
-    if (Status != EFI_SUCCESS) {
-      CleanUpMemory ();
-      return Status;
-    }
-  }
-
-  //
-  // Re arrange the FIT Table for Ascending order of their FIT Type..
-  //
-  SortFitTable ();
-
-  //
-  // All components have been updated in FIT table. Now perform the FIT table
-  // checksum. The following function will check if Checksum is required,
-  // if yes, then it will perform the checksum otherwise not.
-  //
-  CalculateFitTableChecksum ();
-
-  //
-  // Write the FFS header
-  //
-  Vtf1TotalSize += sizeof (EFI_FFS_FILE_HEADER);
-  Vtf1LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
-
-  Status = UpdateFfsHeader (Vtf1TotalSize, FIRST_VTF);
-  if (Status != EFI_SUCCESS) {
-    CleanUpMemory ();
-    return Status;
-  }
-  //
-  // Update the VTF buffer into specified VTF binary file
-  //
-  Status  = WriteVtfBinary (OutFileName1, Vtf1TotalSize, FIRST_VTF);
-
-  if (SecondVTF) {
-    Vtf2TotalSize += sizeof (EFI_FFS_FILE_HEADER);
-    Vtf2LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
-    Status = UpdateFfsHeader (Vtf2TotalSize, SECOND_VTF);
-    if (Status != EFI_SUCCESS) {
-      CleanUpMemory ();
-      return Status;
-    }
-
-    //
-    // Update the VTF buffer into specified VTF binary file
-    //
-    Status  = WriteVtfBinary (OutFileName2, Vtf2TotalSize, SECOND_VTF);
-  }
-
-  CleanUpMemory ();
-
-  return Status;
-}
-
-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_OUT_OF_RESOURCES - System out of resources for memory allocation.
-
---*/
-{
-  EFI_STATUS  Status;
-  FILE        *Fp;
-  UINT64      *StartAddressPtr;
-  UINTN       FirstFwVSize;
-
-  StartAddressPtr   = malloc (sizeof (UINT64));
-  if (StartAddressPtr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-  *StartAddressPtr = StartAddress;
-
-  Fp = fopen (LongFilePath (OutFileName1), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", OutFileName1);
-    if (StartAddressPtr) {
-      free (StartAddressPtr);
-    }
-    return EFI_ABORTED;
-  }
-
-  FirstFwVSize = _filelength (fileno (Fp));
-  fseek (Fp, (long) (FirstFwVSize - (UINTN) (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT)), SEEK_SET);
-  fwrite ((VOID *) StartAddressPtr, sizeof (UINT64), 1, Fp);
-
-  if (Fp) {
-    fclose (Fp);
-  }
-
-  if (StartAddressPtr) {
-    free (StartAddressPtr);
-  }
-
-  Status = EFI_SUCCESS;
-  return Status;
-}
-
-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.
-
---*/
-{
-  FILE    *SourceFile;
-  FILE    *DestFile;
-  CHAR8   Buffer[MAX_LONG_FILE_PATH];
-  CHAR8   Type[MAX_LONG_FILE_PATH];
-  CHAR8   Address[MAX_LONG_FILE_PATH];
-  CHAR8   Section[MAX_LONG_FILE_PATH];
-  CHAR8   Token[MAX_LONG_FILE_PATH];
-  CHAR8   BaseToken[MAX_LONG_FILE_PATH];
-  CHAR8   FormatString[MAX_LINE_LEN];
-  UINT64  TokenAddress;
-  long    StartLocation;
-
-  //
-  // Verify input parameters.
-  //
-  if (BaseAddress == 0 || DestFileName == NULL || SourceFileName == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Open the source file
-  //
-  SourceFile = fopen (LongFilePath (SourceFileName), "r");
-  if (SourceFile == NULL) {
-
-    //
-    // SYM files are not required.
-    //
-    return EFI_SUCCESS;
-  }
-
-  //
-  // Use the file name minus extension as the base for tokens
-  //
-  if (strlen (SourceFileName) >= MAX_LONG_FILE_PATH) {
-    fclose (SourceFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
-    return EFI_ABORTED;
-  }
-  strncpy (BaseToken, SourceFileName, MAX_LONG_FILE_PATH - 1);
-  BaseToken[MAX_LONG_FILE_PATH - 1] = 0;
-  strtok (BaseToken, ". \t\n");
-  if (strlen (BaseToken) + strlen ("__") >= MAX_LONG_FILE_PATH) {
-    fclose (SourceFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
-    return EFI_ABORTED;
-  }
-  strncat (BaseToken, "__", MAX_LONG_FILE_PATH - strlen (BaseToken) - 1);
-
-  //
-  // Open the destination file
-  //
-  DestFile = fopen (LongFilePath (DestFileName), "a+");
-  if (DestFile == NULL) {
-    fclose (SourceFile);
-    Error (NULL, 0, 0001, "Error opening file", DestFileName);
-    return EFI_ABORTED;
-  }
-
-  //
-  // If this is the beginning of the output file, write the symbol format info.
-  //
-  if (fseek (DestFile, 0, SEEK_END) != 0) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "not at the beginning of the output file.");
-    return EFI_ABORTED;
-  }
-
-  StartLocation = ftell (DestFile);
-
-  if (StartLocation == 0) {
-    fprintf (DestFile, "TEXTSYM format | V1.0\n");
-  } else if (StartLocation == -1) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "StartLocation error");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Read the first line
-  //
-  if (fgets (Buffer, MAX_LONG_FILE_PATH, SourceFile) == NULL) {
-    Buffer[0] = 0;
-  }
-
-  //
-  // Make sure it matches the expected sym format
-  //
-  if (strcmp (Buffer, "TEXTSYM format | V1.0\n")) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The symbol file does not match the expected TEXTSYM format (V1.0.)");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Generate the format string for fscanf
-  //
-  sprintf (
-    FormatString,
-    "%%%us | %%%us | %%%us | %%%us\n",
-    (unsigned) sizeof (Type) - 1,
-    (unsigned) sizeof (Address) - 1,
-    (unsigned) sizeof (Section) - 1,
-    (unsigned) sizeof (Token) - 1
-    );
-
-  //
-  // Read in the file
-  //
-  while (feof (SourceFile) == 0) {
-
-    //
-    // Read a line
-    //
-    if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) == 4) {
-
-      //
-      // Get the token address
-      //
-      AsciiStringToUint64 (Address, TRUE, &TokenAddress);
-      if (TokenAddress > FileSize) {
-        //
-        // Symbol offset larger than FileSize. This Symbol can't be in Bin file. Don't print them.
-        //
-        break;
-      }
-
-      //
-      // Add the base address, the size of the FFS file header and the size of the peim header.
-      //
-      TokenAddress += BaseAddress &~IPF_CACHE_BIT;
-
-      fprintf (DestFile, "%s | %016llX | ", Type, (unsigned long long) TokenAddress);
-      fprintf (DestFile, "%s | %s\n    %s\n", Section, Token, BaseToken);
-    }
-  }
-
-  fclose (SourceFile);
-  fclose (DestFile);
-  return EFI_SUCCESS;
-}
-
-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
-
---*/
-{
-  FIT_TABLE *TmpFitPtr;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddOffset;
-  UINTN     RelativeAddress;
-  UINTN     Size;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  TmpFitPtr = (FIT_TABLE *) RelativeAddress;
-
-  Size      = TmpFitPtr->CompSize * 16;
-
-  if ((TmpFitPtr->CvAndType & CHECKSUM_BIT_MASK) >> 7) {
-    TmpFitPtr->CheckSum = 0;
-    TmpFitPtr->CheckSum = CalculateChecksum8 ((UINT8 *) TmpFitPtr, Size);
-  } else {
-    TmpFitPtr->CheckSum = 0;
-  }
-
-  return EFI_SUCCESS;
-}
-
-VOID
-Version (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  Displays the standard utility information to SDTOUT
-
-Arguments:
-
-  None
-
-Returns:
-
-  None
-
---*/
-{
-  fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);
-}
-
-VOID
-Usage (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  Displays the utility usage syntax to STDOUT
-
-Arguments:
-
-  None
-
-Returns:
-
-  None
-
---*/
-{
-  //
-  // Summary usage
-  //
-  fprintf (stdout, "Usage: %s [options] <-f input_file> <-r BaseAddress> <-s FwVolumeSize>\n\n", UTILITY_NAME);
-
-  //
-  // Copyright declaration
-  //
-  fprintf (stdout, "Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.\n\n");
-  //
-  // Details Option
-  //
-  fprintf (stdout, "Options:\n");
-  fprintf (stdout, "  -f Input_file,   --filename Input_file\n\
-                        Input_file is name of the BS Image INF file\n");
-  fprintf (stdout, "  -r BaseAddress,  --baseaddr BaseAddress\n\
-                        BaseAddress is the starting address of Firmware Volume\n\
-                        where Boot Strapped Image will reside.\n");
-  fprintf (stdout, "  -s FwVolumeSize, --size FwVolumeSize\n\
-                        FwVolumeSize is the size of Firmware Volume.\n");
-  fprintf (stdout, "  -o FileName,     --output FileName\n\
-                        File will be created to store the ouput content.\n");
-  fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");
-  fprintf (stdout, "  --version             Show program's version number and exit.\n");
-  fprintf (stdout, "  -h, --help            Show this help message and exit.\n");
-  fprintf (stdout, "  -q, --quiet           Disable all messages except FATAL ERRORS.\n");
-  fprintf (stdout, "  -d, --debug [#, 0-9]  Enable debug messages at level #.\n");
-}
-
-int
-main (
-  IN  int  argc,
-  IN  char  **argv
-  )
-/*++
-
-Routine Description:
-
-  This utility uses GenVtf.dll to build a Boot Strap File Image which will be
-  part of firmware volume image.
-
-Arguments:
-
-  argc   - The count of the parameters
-  argv   - The parameters
-
-
-Returns:
-
-  0   - No error conditions detected.
-  1   - One or more of the input parameters is invalid.
-  2   - A resource required by the utility was unavailable.
-      - Most commonly this will be memory allocation or file creation.
-  3   - GenFvImage.dll could not be loaded.
-  4   - Error executing the GenFvImage dll.
-  5   - Now this tool does not support the IA32 platform
-
---*/
-{
-  UINT8          Index;
-  UINT64         StartAddress1;
-  UINT64         StartAddress2;
-  UINT64         FwVolSize1;
-  UINT64         FwVolSize2;
-  BOOLEAN       FirstRoundO;
-  BOOLEAN       FirstRoundB;
-  BOOLEAN       FirstRoundS;
-  EFI_STATUS    Status;
-  FILE          *VtfFP;
-  CHAR8         *VtfFileName;
-
-  SetUtilityName (UTILITY_NAME);
-
-  //
-  // Initialize variables
-  //
-  StartAddress1 = 0;
-  StartAddress2 = 0;
-  FwVolSize1    = 0;
-  FwVolSize2    = 0;
-  FirstRoundB   = TRUE;
-  FirstRoundS   = TRUE;
-  FirstRoundO   = TRUE;
-  DebugMode     = FALSE;
-  OutFileName1  = NULL;
-  OutFileName2  = NULL;
-  VtfFP = NULL;
-  DebugLevel = 0;
-
-  //
-  // Verify the correct number of arguments
-  //
-  if (argc == 1) {
-    Usage();
-    return 0;
-  }
-
-  if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
-    Usage();
-    return 0;
-  }
-
-  if ((strcmp(argv[1], "--version") == 0)) {
-    Version();
-    return 0;
-  }
-
-  //
-  // Parse the command line arguments
-  //
-  for (Index = 1; Index < argc; Index += 2) {
-    if ((stricmp (argv[Index], "-o") == 0) || (stricmp (argv[Index], "--output") == 0)) {
-      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
-        Error (NULL, 0, 1003, "Invalid option value", "Output file is missing for -o option");
-        goto ERROR;
-      }
-      //
-      // Get the output file name
-      //
-      VTF_OUTPUT = TRUE;
-      if (FirstRoundO) {
-        //
-        // It's the first output file name
-        //
-        OutFileName1 = (CHAR8 *)argv[Index+1];
-        FirstRoundO = FALSE;
-      } else {
-        //
-        //It's the second output file name
-        //
-        OutFileName2 = (CHAR8 *)argv[Index+1];
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-f") == 0) || (stricmp (argv[Index], "--filename") == 0)) {
-      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
-        Error (NULL, 0, 1003, "Invalid option value", "BS Image INF file is missing for -f option");
-        goto ERROR;
-      }
-      //
-      // Get the input VTF file name
-      //
-      VtfFileName = argv[Index+1];
-      if (VtfFP != NULL) {
-        //
-        // VTF file name has been given previously, override with the new value
-        //
-        fclose (VtfFP);
-      }
-      VtfFP = fopen (LongFilePath (VtfFileName), "rb");
-      if (VtfFP == NULL) {
-        Error (NULL, 0, 0001, "Error opening file", VtfFileName);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-r") == 0) || (stricmp (argv[Index], "--baseaddr") == 0)) {
-      if (FirstRoundB) {
-        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress1);
-        FirstRoundB = FALSE;
-      } else {
-        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress2);
-      }
-      if (Status != EFI_SUCCESS) {
-        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV start address.", argv[Index + 1]);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-s") == 0) || (stricmp (argv[Index], "--size") == 0)) {
-      if (FirstRoundS) {
-        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize1);
-        FirstRoundS = FALSE;
-      } else {
-        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize2);
-        SecondVTF = TRUE;
-      }
-
-      if (Status != EFI_SUCCESS) {
-        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV size.", argv[Index + 1]);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-v") == 0) || (stricmp (argv[Index], "--verbose") == 0)) {
-      VerboseMode = TRUE;
-      Index--;
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-q") == 0) || (stricmp (argv[Index], "--quiet") == 0)) {
-      QuietMode = TRUE;
-      Index--;
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-d") == 0) || (stricmp (argv[Index], "--debug") == 0)) {
-      //
-      // debug level specified
-      //
-      Status = AsciiStringToUint64(argv[Index + 1], FALSE, &DebugLevel);
-      if (EFI_ERROR (Status)) {
-        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[Index], argv[Index + 1]);
-        goto ERROR;
-      }
-      if (DebugLevel > 9)  {
-        Error (NULL, 0, 2000, "Invalid option value", "Unrecognized argument %s.", argv[Index + 1]);
-        goto ERROR;
-      }
-      if((DebugLevel <= 9) &&(DebugLevel >= 5)) {
-        DebugMode = TRUE;
-      } else {
-        DebugMode = FALSE;
-      }
-      continue;
-    }
-
-    Error (NULL, 0, 2000, "Invalid parameter", "Unrecognized argument %s.", argv[Index]);
-    goto ERROR;
-  }
-
-  if (VtfFP == NULL) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No BS Image INF file is specified");
-    goto ERROR;
-  }
-
-  if (FirstRoundB) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No FV base address is specified");
-    goto ERROR;
-  }
-
-  if (FirstRoundS) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No FV Size is specified");
-    goto ERROR;
-  }
-  //
-  // All Parameters has been parsed, now set the message print level
-  //
-  if (QuietMode) {
-    SetPrintLevel(40);
-  } else if (VerboseMode) {
-    SetPrintLevel(15);
-  } else if (DebugMode) {
-    SetPrintLevel(DebugLevel);
-  }
-
-  if (VerboseMode) {
-    VerboseMsg("%s tool start.\n", UTILITY_NAME);
-  }
-
-  if (VTF_OUTPUT == FALSE) {
-    if (SecondVTF == TRUE) {
-      OutFileName1 = VTF_OUTPUT_FILE1;
-      OutFileName2 = VTF_OUTPUT_FILE2;
-    } else {
-      OutFileName1 = VTF_OUTPUT_FILE1;
-    }
-    SymFileName = VTF_SYM_FILE;
-  } else {
-    INTN OutFileNameLen;
-    INTN NewIndex;
-
-    assert (OutFileName1);
-    OutFileNameLen = strlen(OutFileName1);
-
-    for (NewIndex = OutFileNameLen; NewIndex > 0; --NewIndex) {
-      if (OutFileName1[NewIndex] == '/' || OutFileName1[NewIndex] == '\\') {
-        break;
-      }
-    }
-    if (NewIndex == 0) {
-      SymFileName = VTF_SYM_FILE;
-    } else {
-      INTN SymFileNameLen = NewIndex + 1 + strlen(VTF_SYM_FILE);
-      SymFileName = malloc(SymFileNameLen + 1);
-      if (SymFileName == NULL) {
-        Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
-        goto ERROR;
-      }
-      memcpy(SymFileName, OutFileName1, NewIndex + 1);
-      memcpy(SymFileName + NewIndex + 1, VTF_SYM_FILE, strlen(VTF_SYM_FILE));
-      SymFileName[SymFileNameLen] = '\0';
-    }
-    if (DebugMode) {
-      DebugMsg(UTILITY_NAME, 0, DebugLevel, SymFileName, NULL);
-    }
-  }
-
-  //
-  // Call the GenVtfImage
-  //
-  if (DebugMode) {
-    DebugMsg(UTILITY_NAME, 0, DebugLevel, "Start to generate the VTF image\n", NULL);
-  }
-  Status = GenerateVtfImage (StartAddress1, FwVolSize1, StartAddress2, FwVolSize2, VtfFP);
-
-  if (EFI_ERROR (Status)) {
-    switch (Status) {
-
-    case EFI_INVALID_PARAMETER:
-      Error (NULL, 0, 2000, "Invalid parameter", "Invalid parameter passed to GenVtf function.");
-      break;
-
-    case EFI_ABORTED:
-      Error (NULL, 0, 3000, "Invalid", "Error detected while creating the file image.");
-      break;
-
-    case EFI_OUT_OF_RESOURCES:
-      Error (NULL, 0, 4002, "Resource", "GenVtfImage function could not allocate required resources.");
-      break;
-
-    case EFI_VOLUME_CORRUPTED:
-      Error (NULL, 0, 3000, "Invalid", "No base address was specified.");
-      break;
-
-    default:
-      Error (NULL, 0, 3000, "Invalid", "GenVtfImage function returned unknown status %x.", (int) Status );
-      break;
-    }
-  }
-ERROR:
-  if (VtfFP != NULL) {
-    fclose (VtfFP);
-  }
-
-  if (DebugMode) {
-    DebugMsg(UTILITY_NAME, 0, DebugLevel, "VTF image generated successful\n", NULL);
-  }
-
-  if (VerboseMode) {
-    VerboseMsg("%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());
-  }
-  return GetUtilityStatus();
-}
diff --git a/BaseTools/Source/C/GenVtf/GenVtf.h b/BaseTools/Source/C/GenVtf/GenVtf.h
deleted file mode 100644
index 62c61aa84e..0000000000
--- a/BaseTools/Source/C/GenVtf/GenVtf.h
+++ /dev/null
@@ -1,326 +0,0 @@
-/** @file
-This file contains the relevant declarations required to generate Boot Strap File
-
-Copyright (c) 1999 - 2018, 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
diff --git a/BaseTools/Source/C/GenVtf/Makefile b/BaseTools/Source/C/GenVtf/Makefile
deleted file mode 100644
index 957f25bd16..0000000000
--- a/BaseTools/Source/C/GenVtf/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-## @file
-# Windows makefile for 'GenVtf' module build.
-#
-# Copyright (c) 2007 - 2010, 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.
-#
-!INCLUDE ..\Makefiles\ms.common
-
-APPNAME = GenVtf
-
-LIBS = $(LIB_PATH)\Common.lib
-
-OBJECTS = GenVtf.obj
-
-!INCLUDE ..\Makefiles\ms.app
-
diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
index 67454ad74b..06a877ee6b 100755
--- a/BaseTools/toolsetup.bat
+++ b/BaseTools/toolsetup.bat
@@ -265,7 +265,6 @@ IF NOT EXIST "%EDK_TOOLS_BIN%\GenFv.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenFw.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenPage.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenSec.exe" goto check_c_tools
-IF NOT EXIST "%EDK_TOOLS_BIN%\GenVtf.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\Split.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\TianoCompress.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\VfrCompile.exe" goto check_c_tools
-- 
2.18.0.windows.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] BaseTools: Remove GenVtf
  2018-11-23  5:47 [PATCH] BaseTools: Remove GenVtf Shenglei Zhang
@ 2018-11-23 15:10 ` Gao, Liming
  0 siblings, 0 replies; 3+ messages in thread
From: Gao, Liming @ 2018-11-23 15:10 UTC (permalink / raw)
  To: Zhang, Shenglei, edk2-devel@lists.01.org

Please update edk2\BaseTools\Source\C\Makefile and edk2\BaseTools\Source\C\GNUmakefile to remove this tool. It is not required to be compiled after it is removed. 

> -----Original Message-----
> From: Zhang, Shenglei
> Sent: Friday, November 23, 2018 1:48 PM
> To: edk2-devel@lists.01.org
> Cc: Zhu, Yonghong <yonghong.zhu@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [PATCH] BaseTools: Remove GenVtf
> 
> GenVtf C tool is IPF specific. IPF support has been removed
> from edk2 trunk. This tool can be removed.
> https://bugzilla.tianocore.org/show_bug.cgi?id=1349
> 
> Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
> ---
>  BaseTools/Source/BinaryFiles.txt      |    1 -
>  BaseTools/Source/C/GenVtf/GNUmakefile |   21 -
>  BaseTools/Source/C/GenVtf/GenVtf.c    | 2811 -------------------------
>  BaseTools/Source/C/GenVtf/GenVtf.h    |  326 ---
>  BaseTools/Source/C/GenVtf/Makefile    |   22 -
>  BaseTools/toolsetup.bat               |    1 -
>  6 files changed, 3182 deletions(-)
>  delete mode 100644 BaseTools/Source/C/GenVtf/GNUmakefile
>  delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.c
>  delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.h
>  delete mode 100644 BaseTools/Source/C/GenVtf/Makefile
> 
> diff --git a/BaseTools/Source/BinaryFiles.txt b/BaseTools/Source/BinaryFiles.txt
> index aad138ebd5..d707df9dda 100644
> --- a/BaseTools/Source/BinaryFiles.txt
> +++ b/BaseTools/Source/BinaryFiles.txt
> @@ -44,7 +44,6 @@ GenFw.exe
>  GenPage.exe
>  GenPatchPcdTable.exe
>  GenSec.exe
> -GenVtf.exe
>  ImportTool.bat
>  LzmaCompress.exe
>  LzmaF86Compress.bat
> diff --git a/BaseTools/Source/C/GenVtf/GNUmakefile b/BaseTools/Source/C/GenVtf/GNUmakefile
> deleted file mode 100644
> index 54160c64d4..0000000000
> --- a/BaseTools/Source/C/GenVtf/GNUmakefile
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -## @file
> -# GNU/Linux makefile for 'GenVtf' module build.
> -#
> -# Copyright (c) 2007 - 2018, 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.
> -#
> -MAKEROOT ?= ..
> -
> -APPNAME = GenVtf
> -
> -LIBS = -lCommon
> -
> -OBJECTS = GenVtf.o
> -
> -include $(MAKEROOT)/Makefiles/app.makefile
> diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c
> deleted file mode 100644
> index 3a7ac06156..0000000000
> --- a/BaseTools/Source/C/GenVtf/GenVtf.c
> +++ /dev/null
> @@ -1,2811 +0,0 @@
> -/** @file
> -This file contains functions required to generate a boot strap file (BSF) also
> -known as the Volume Top File (VTF)
> -
> -Copyright (c) 1999 - 2018, 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.
> -
> -**/
> -
> -//
> -//
> -//
> -#include <FvLib.h>
> -#include <Common/UefiBaseTypes.h>
> -#include "GenVtf.h"
> -#include <Guid/PiFirmwareFileSystem.h>
> -#include "CommonLib.h"
> -#include "EfiUtilityMsgs.h"
> -
> -//
> -// Global variables
> -//
> -UINTN SectionOptionFlag = 0;
> -UINTN SectionCompFlag = 0;
> -
> -UINT64        DebugLevel;
> -BOOLEAN       DebugMode;
> -
> -BOOLEAN     QuietMode = FALSE;
> -
> -BOOLEAN     VTF_OUTPUT = FALSE;
> -CHAR8       *OutFileName1;
> -CHAR8       *OutFileName2;
> -CHAR8       *SymFileName;
> -
> -CHAR8           **TokenStr;
> -CHAR8           **OrgStrTokPtr;
> -
> -PARSED_VTF_INFO *FileListPtr;
> -PARSED_VTF_INFO *FileListHeadPtr;
> -
> -VOID            *Vtf1Buffer;
> -VOID            *Vtf1EndBuffer;
> -VOID            *Vtf2Buffer;
> -VOID            *Vtf2EndBuffer;
> -
> -UINTN           ValidLineNum        = 0;
> -UINTN           ValidFFDFileListNum = 0;
> -
> -//
> -// Section Description and their number of occurences in *.INF file
> -//
> -UINTN           NumFvFiles        = 0;
> -UINTN           SectionOptionNum  = 0;
> -
> -//
> -// Global flag which will check for VTF Present, if yes then will be used
> -// to decide about adding FFS header to pad data
> -//
> -BOOLEAN         VTFPresent = FALSE;
> -BOOLEAN         SecondVTF = FALSE;
> -
> -//
> -// Address related information
> -//
> -UINT64          Fv1BaseAddress        = 0;
> -UINT64          Fv2BaseAddress        = 0;
> -UINT64          Fv1EndAddress         = 0;
> -UINT64          Fv2EndAddress         = 0;
> -UINT32          Vtf1TotalSize         = SIZE_TO_OFFSET_PAL_A_END;
> -UINT64          Vtf1LastStartAddress  = 0;
> -UINT32          Vtf2TotalSize         = 0;
> -UINT64          Vtf2LastStartAddress  = 0;
> -
> -UINT32          BufferToTop           = 0;
> -
> -//
> -// IA32 Reset Vector Bin name
> -//
> -CHAR8           IA32BinFile[FILE_NAME_SIZE];
> -
> -//
> -// Function Implementations
> -//
> -EFI_STATUS
> -ConvertVersionInfo (
> -  IN      CHAR8     *Str,
> -  IN OUT  UINT8     *MajorVer,
> -  IN OUT  UINT8     *MinorVer
> -  )
> -/*++
> -Routine Description:
> -
> -  This function split version to major version and minor version
> -
> -Arguments:
> -
> -  Str      - String representing in form XX.XX
> -  MajorVer - The major version
> -  MinorVer - The minor version
> -
> -Returns:
> -
> -  EFI_SUCCESS  - The function completed successfully.
> -
> ---*/
> -{
> -  CHAR8  TemStr[5] = "0000";
> -  int    Major;
> -  int    Minor;
> -  UINTN Length;
> -
> -  Major = 0;
> -  Minor = 0;
> -
> -  if (strstr (Str, ".") != NULL) {
> -    sscanf (
> -      Str,
> -      "%02x.%02x",
> -      &Major,
> -      &Minor
> -      );
> -  } else {
> -    Length = strlen(Str);
> -    if (Length < 4) {
> -      memcpy (TemStr + 4 - Length, Str, Length);
> -    } else {
> -      memcpy (TemStr, Str + Length - 4, 4);
> -    }
> -
> -    sscanf (
> -      TemStr,
> -      "%02x%02x",
> -      &Major,
> -      &Minor
> -      );
> -  }
> -
> -  *MajorVer = (UINT8) Major;
> -  *MinorVer = (UINT8) Minor;
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -TrimLine (
> -  IN  CHAR8 *Line
> -  )
> -/*++
> -Routine Description:
> -
> -  This function cleans up the line by removing all whitespace and
> -  comments
> -
> -Arguments:
> -
> -  Line   - The pointer of the string
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  CHAR8 TmpLine[FILE_NAME_SIZE];
> -  CHAR8 Char;
> -  CHAR8 *Ptr0;
> -  UINTN Index;
> -  UINTN Index2;
> -
> -  //
> -  // Change '#' to '//' for Comment style
> -  //
> -  if (((Ptr0 = strchr (Line, '#')) != NULL) || ((Ptr0 = strstr (Line, "//")) != NULL)) {
> -    Line[Ptr0 - Line] = 0;
> -  }
> -
> -  //
> -  // Initialize counters
> -  //
> -  Index   = 0;
> -  Index2  = 0;
> -
> -  while ((Char = Line[Index]) != 0) {
> -    if ((Char != ' ') && (Char != '\t') && (Char != '\n') && (Char != '\r')) {
> -      TmpLine[Index2++] = Char;
> -    }
> -    Index++;
> -  }
> -
> -  TmpLine[Index2] = 0;
> -  strcpy (Line, TmpLine);
> -}
> -
> -VOID
> -ValidLineCount (
> -  IN  FILE *Fp
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function calculated number of valid lines in a input file.
> -
> -Arguments:
> -
> -  Fp    - Pointer to a file handle which has been opened.
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  CHAR8 Buff[FILE_NAME_SIZE];
> -  while (fgets(Buff, sizeof (Buff), Fp)) {
> -    TrimLine (Buff);
> -    if (Buff[0] == 0) {
> -      continue;
> -    }
> -    ValidLineNum++;
> -  }
> -}
> -
> -EFI_STATUS
> -ParseInputFile (
> -  IN  FILE *Fp
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function parses the input file and tokenize the string
> -
> -Arguments:
> -
> -  Fp    - Pointer to a file handle which has been opened.
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  CHAR8 *Token;
> -  CHAR8 Buff[FILE_NAME_SIZE + 1];
> -  CHAR8 Delimit[] = "=";
> -
> -  Buff [FILE_NAME_SIZE] = '\0';
> -  Token = NULL;
> -
> -  while (fgets (Buff, FILE_NAME_SIZE, Fp) != NULL) {
> -    TrimLine (Buff);
> -    if (Buff[0] == 0) {
> -      continue;
> -    }
> -    Token = strtok (Buff, Delimit);
> -    while (Token != NULL) {
> -      strcpy (*TokenStr, Token);
> -      TokenStr ++;
> -      Token = strtok (NULL, Delimit);
> -    }
> -  }
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -InitializeComps (
> -  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function initializes the relevant global variable which is being
> -  used to store the information retrieved from INF file.  This also initializes
> -  the VTF symbol file.
> -
> -Arguments:
> -
> -  None
> -
> -Returns:
> -
> -  EFI_SUCCESS            - The function completed successfully
> -  EFI_OUT_OF_RESOURCES   - Malloc failed.
> -
> ---*/
> -{
> -
> -  FileListPtr = malloc (sizeof (PARSED_VTF_INFO));
> -
> -  if (FileListPtr == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -
> -  FileListHeadPtr = FileListPtr;
> -  memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
> -  FileListPtr->NextVtfInfo = NULL;
> -
> -  remove (SymFileName);
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -ParseAndUpdateComponents (
> -  IN  PARSED_VTF_INFO   *VtfInfo
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function initializes the relevant global variable which is being
> -  used to store the information retrieved from INF file.
> -
> -Arguments:
> -
> -  VtfInfo  - A pointer to the VTF Info Structure
> -
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  UINT64  StringValue;
> -
> -  while (*TokenStr != NULL && (strnicmp (*TokenStr, "COMP_NAME", 9) != 0)) {
> -
> -    if (strnicmp (*TokenStr, "COMP_LOC", 8) == 0) {
> -      TokenStr++;
> -      if (strnicmp (*TokenStr, "F", 1) == 0) {
> -        VtfInfo->LocationType = FIRST_VTF;
> -      } else if (strnicmp (*TokenStr, "S", 1) == 0) {
> -        VtfInfo->LocationType = SECOND_VTF;
> -      } else {
> -        VtfInfo->LocationType = NONE;
> -      }
> -    } else if (strnicmp (*TokenStr, "COMP_TYPE", 9) == 0) {
> -      TokenStr++;
> -      if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
> -        Error (NULL, 0, 5001, "Cannot get: \"0x%s\".", *TokenStr);
> -        return ;
> -      }
> -
> -      VtfInfo->CompType = (UINT8) StringValue;
> -    } else if (strnicmp (*TokenStr, "COMP_VER", 8) == 0) {
> -      TokenStr++;
> -      if (strnicmp (*TokenStr, "-", 1) == 0) {
> -        VtfInfo->VersionPresent = FALSE;
> -        VtfInfo->MajorVer       = 0;
> -        VtfInfo->MinorVer       = 0;
> -      } else {
> -        VtfInfo->VersionPresent = TRUE;
> -        ConvertVersionInfo (*TokenStr, &VtfInfo->MajorVer, &VtfInfo->MinorVer);
> -      }
> -    } else if (strnicmp (*TokenStr, "COMP_BIN", 8) == 0) {
> -      TokenStr++;
> -      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
> -        Error (NULL, 0, 3000, "Invalid", "The 'COMP_BIN' name is too long.");
> -        return ;
> -      }
> -      strncpy (VtfInfo->CompBinName, *TokenStr, FILE_NAME_SIZE - 1);
> -      VtfInfo->CompBinName[FILE_NAME_SIZE - 1] = 0;
> -    } else if (strnicmp (*TokenStr, "COMP_SYM", 8) == 0) {
> -      TokenStr++;
> -      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
> -        Error (NULL, 0, 3000, "Invalid", "The 'COMP_SYM' name is too long.");
> -        return ;
> -      }
> -      strncpy (VtfInfo->CompSymName, *TokenStr, FILE_NAME_SIZE - 1);
> -      VtfInfo->CompSymName[FILE_NAME_SIZE - 1] = 0;
> -    } else if (strnicmp (*TokenStr, "COMP_SIZE", 9) == 0) {
> -      TokenStr++;
> -      if (strnicmp (*TokenStr, "-", 1) == 0) {
> -        VtfInfo->PreferredSize  = FALSE;
> -        VtfInfo->CompSize       = 0;
> -      } else {
> -        VtfInfo->PreferredSize = TRUE;
> -        if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
> -          Error (NULL, 0, 5001, "Parse error", "Cannot get: %s.", TokenStr);
> -          return ;
> -        }
> -
> -        VtfInfo->CompSize = (UINTN) StringValue;
> -      }
> -
> -    } else if (strnicmp (*TokenStr, "COMP_CS", 7) == 0) {
> -      TokenStr++;
> -      if (strnicmp (*TokenStr, "1", 1) == 0) {
> -        VtfInfo->CheckSumRequired = 1;
> -      } else if (strnicmp (*TokenStr, "0", 1) == 0) {
> -        VtfInfo->CheckSumRequired = 0;
> -      } else {
> -        Error (NULL, 0, 3000, "Invaild", "Bad value in INF file required field: Checksum, the value must be '0' or '1'.");
> -      }
> -    }
> -
> -    TokenStr++;
> -    if (*TokenStr == NULL) {
> -      break;
> -    }
> -  }
> -}
> -
> -VOID
> -InitializeInFileInfo (
> -  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function intializes the relevant global variable which is being
> -  used to store the information retrieved from INF file.
> -
> -Arguments:
> -
> -  NONE
> -
> -Returns:
> -
> -  NONE
> -
> ---*/
> -{
> -
> -  SectionOptionFlag = 0;
> -  SectionCompFlag   = 0;
> -  TokenStr          = OrgStrTokPtr;
> -
> -  while (*TokenStr != NULL) {
> -    if (strnicmp (*TokenStr, "[OPTIONS]", 9) == 0) {
> -      SectionOptionFlag = 1;
> -      SectionCompFlag   = 0;
> -    }
> -
> -    if (strnicmp (*TokenStr, "[COMPONENTS]", 12) == 0) {
> -      if (FileListPtr == NULL) {
> -        FileListPtr = FileListHeadPtr;
> -      }
> -
> -      SectionCompFlag   = 1;
> -      SectionOptionFlag = 0;
> -      TokenStr++;
> -    }
> -
> -    if (SectionOptionFlag) {
> -      if (stricmp (*TokenStr, "IA32_RST_BIN") == 0) {
> -        TokenStr++;
> -        if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
> -          Error (NULL, 0, 3000, "Invalid", "The 'IA32_RST_BIN' name is too long.");
> -          break;
> -        }
> -        strncpy (IA32BinFile, *TokenStr, FILE_NAME_SIZE - 1);
> -        IA32BinFile[FILE_NAME_SIZE - 1] = 0;
> -      }
> -    }
> -
> -    if (SectionCompFlag) {
> -      if (stricmp (*TokenStr, "COMP_NAME") == 0) {
> -        TokenStr++;
> -        if (strlen (*TokenStr) >= COMPONENT_NAME_SIZE) {
> -          Error (NULL, 0, 3000, "Invalid", "The 'COMP_NAME' name is too long.");
> -          break;
> -        }
> -        strncpy (FileListPtr->CompName, *TokenStr, COMPONENT_NAME_SIZE - 1);
> -        FileListPtr->CompName[COMPONENT_NAME_SIZE - 1] = 0;
> -        TokenStr++;
> -        ParseAndUpdateComponents (FileListPtr);
> -      }
> -
> -      if (*TokenStr != NULL) {
> -        FileListPtr->NextVtfInfo  = malloc (sizeof (PARSED_VTF_INFO));
> -        if (FileListPtr->NextVtfInfo == NULL) {
> -          Error (NULL, 0, 4003, "Resource", "Out of memory resources.", NULL);
> -          break;
> -        }
> -        FileListPtr = FileListPtr->NextVtfInfo;
> -        memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
> -        FileListPtr->NextVtfInfo = NULL;
> -        continue;
> -      } else {
> -        break;
> -      }
> -    }
> -
> -    TokenStr++;
> -  }
> -}
> -
> -EFI_STATUS
> -GetVtfRelatedInfoFromInfFile (
> -  IN FILE *FilePointer
> -  )
> -/*++
> -
> -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 VTF
> -
> -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 information
> -  EFI_OUT_OF_RESOURCES  - Malloc Failed
> -  EFI_SUCCESS           - The function completed successfully
> -
> ---*/
> -{
> -  FILE        *Fp;
> -  UINTN       Index;
> -  UINTN       Index1;
> -  EFI_STATUS  Status;
> -
> -  Status = EFI_SUCCESS;
> -  Fp = FilePointer;
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "BSF INF file is invalid!");
> -    return EFI_ABORTED;
> -  }
> -
> -  ValidLineCount (Fp);
> -
> -  if (ValidLineNum == 0) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "File does not contain any valid information!");
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  TokenStr = (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum + 1));
> -
> -  if (TokenStr == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -
> -  memset (TokenStr, 0, (sizeof (UINTN) * (2 * ValidLineNum + 1)));
> -  OrgStrTokPtr = TokenStr;
> -
> -  for (Index = 0; Index < (2 * ValidLineNum); Index++) {
> -    *TokenStr = (CHAR8*)malloc (sizeof (CHAR8) * FILE_NAME_SIZE);
> -
> -    if (*TokenStr == NULL) {
> -      Status = EFI_OUT_OF_RESOURCES;
> -      goto ParseFileError;
> -    }
> -
> -    memset (*TokenStr, 0, FILE_NAME_SIZE);
> -    TokenStr++;
> -  }
> -
> -  TokenStr  = OrgStrTokPtr;
> -  fseek (Fp, 0L, SEEK_SET);
> -
> -  Status = InitializeComps ();
> -
> -  if (Status != EFI_SUCCESS) {
> -    goto ParseFileError;
> -  }
> -
> -  Status = ParseInputFile (Fp);
> -  if (Status != EFI_SUCCESS) {
> -    goto ParseFileError;
> -  }
> -
> -  InitializeInFileInfo ();
> -
> -ParseFileError:
> -
> -  for (Index1 = 0; Index1 < Index; Index1 ++) {
> -    free (OrgStrTokPtr[Index1]);
> -  }
> -
> -  free (OrgStrTokPtr);
> -
> -  return Status;
> -}
> -
> -VOID
> -GetRelativeAddressInVtfBuffer (
> -  IN      UINT64     Address,
> -  IN OUT  UINTN      *RelativeAddress,
> -  IN      LOC_TYPE   LocType
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function checks for the address alignmnet for specified data boundary. In
> -  case the address is not aligned, it returns FALSE and the amount of data in
> -  terms of byte needed to adjust to get the boundary alignmnet. If data is
> -  aligned, TRUE will be returned.
> -
> -Arguments:
> -
> -  Address             - The address of the flash map space
> -  RelativeAddress     - The relative address of the Buffer
> -  LocType             - The type of the VTF
> -
> -
> -Returns:
> -
> -
> ---*/
> -{
> -  UINT64  TempAddress;
> -  UINT8   *LocalBuff;
> -
> -  if (LocType == FIRST_VTF) {
> -    LocalBuff         = (UINT8 *) Vtf1EndBuffer;
> -    TempAddress       = Fv1EndAddress - Address;
> -    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
> -  } else {
> -    LocalBuff         = (UINT8 *) Vtf2EndBuffer;
> -    TempAddress       = Fv2EndAddress - Address;
> -    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
> -  }
> -}
> -
> -EFI_STATUS
> -GetComponentVersionInfo (
> -  IN  OUT PARSED_VTF_INFO   *VtfInfo,
> -  IN      UINT8             *Buffer
> -  )
> -/*++
> -Routine Description:
> -
> -  This function will extract the version information from File
> -
> -Arguments:
> -
> -  VtfInfo  - A Pointer to the VTF Info Structure
> -  Buffer   - A Pointer to type UINT8
> -
> -Returns:
> -
> -   EFI_SUCCESS           - The function completed successfully
> -   EFI_INVALID_PARAMETER - The parameter is invalid
> -
> ---*/
> -{
> -  UINT16      VersionInfo;
> -  EFI_STATUS  Status;
> -
> -  switch (VtfInfo->CompType) {
> -
> -  case COMP_TYPE_FIT_PAL_A:
> -  case COMP_TYPE_FIT_PAL_B:
> -    memcpy (&VersionInfo, (Buffer + 8), sizeof (UINT16));
> -    VtfInfo->MajorVer = (UINT8) ((VersionInfo & 0xFF00) >> 8);
> -    VtfInfo->MinorVer = (UINT8) (VersionInfo & 0x00FF);
> -    Status            = EFI_SUCCESS;
> -    break;
> -
> -  default:
> -    Status = EFI_INVALID_PARAMETER;
> -    break;
> -  }
> -
> -  return Status;
> -}
> -
> -BOOLEAN
> -CheckAddressAlignment (
> -  IN      UINT64  Address,
> -  IN      UINT64  AlignmentData,
> -  IN OUT  UINT64  *AlignAdjustByte
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function checks for the address alignmnet for specified data boundary. In
> -  case the address is not aligned, it returns FALSE and the amount of data in
> -  terms of byte needed to adjust to get the boundary alignmnet. If data is
> -  aligned, TRUE will be returned.
> -
> -Arguments:
> -
> -  Address              - Pointer to buffer containing byte data of component.
> -  AlignmentData        - DataSize for which address needed to be aligned
> -  AlignAdjustByte      - Number of bytes needed to adjust alignment.
> -
> -Returns:
> -
> -  TRUE                 - Address is aligned to specific data size boundary
> -  FALSE                - Address in not aligned to specified data size boundary
> -                       - Add/Subtract AlignAdjustByte to aling the address.
> -
> ---*/
> -{
> -  //
> -  // Check if the assigned address is on address boundary. If not, it will
> -  // return the remaining byte required to adjust the address for specified
> -  // address boundary
> -  //
> -  *AlignAdjustByte = (Address % AlignmentData);
> -
> -  if (*AlignAdjustByte == 0) {
> -    return TRUE;
> -  } else {
> -    return FALSE;
> -  }
> -}
> -
> -EFI_STATUS
> -GetFitTableStartAddress (
> -  IN OUT  FIT_TABLE   **FitTable
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Get the FIT table start address in VTF Buffer
> -
> -Arguments:
> -
> -  FitTable    - Pointer to available fit table where new component can be added
> -
> -Returns:
> -
> -  EFI_SUCCESS - The function completed successfully
> -
> ---*/
> -{
> -  UINT64  FitTableAdd;
> -  UINT64  FitTableAddOffset;
> -  UINTN   RelativeAddress;
> -
> -  //
> -  // Read the Fit Table address from Itanium-based address map.
> -  //
> -  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
> -
> -  //
> -  // Translate this Itanium-based address in terms of local buffer address which
> -  // contains the image for Boot Strapped File. The relative address will be
> -  // the address of fit table VTF buffer.
> -  //
> -  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
> -  FitTableAdd = *(UINTN *) RelativeAddress;
> -
> -  //
> -  // The FitTableAdd is the extracted Itanium based address pointing to FIT
> -  // table. The relative address will return its actual location in VTF
> -  // Buffer.
> -  //
> -  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
> -
> -  *FitTable = (FIT_TABLE *) RelativeAddress;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -GetNextAvailableFitPtr (
> -  IN  FIT_TABLE   **FitPtr
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Get the FIT table address and locate the free space in fit where we can add
> -  new component. In this process, this function locates the fit table using
> -  Fit pointer in Itanium-based address map (as per Intel?Itanium(TM) SAL spec)
> -  and locate the available location in FIT table to be used by new components.
> -  If there are any Fit table which areg not being used contains ComponentType
> -  field as 0x7F. If needed we can change this and spec this out.
> -
> -Arguments:
> -
> -  FitPtr    - Pointer to available fit table where new component can be added
> -
> -Returns:
> -
> -  EFI_SUCCESS  - The function completed successfully
> -
> ---*/
> -{
> -  FIT_TABLE *TmpFitPtr;
> -  UINT64    FitTableAdd;
> -  UINT64    FitTableAddOffset;
> -  UINTN     Index;
> -  UINTN     NumFitComponents;
> -  UINTN     RelativeAddress;
> -
> -  //
> -  // Read the Fit Table address from Itanium-based address map.
> -  //
> -  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
> -
> -  //
> -  // Translate this Itanium-based address in terms of local buffer address which
> -  // contains the image for Boot Strapped File. The relative address will be
> -  // the address of fit table VTF buffer.
> -  //
> -  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
> -  FitTableAdd = *(UINTN *) RelativeAddress;
> -
> -  //
> -  // The FitTableAdd is the extracted Itanium based address pointing to FIT
> -  // table. The relative address will return its actual location in VTF
> -  // Buffer.
> -  //
> -  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
> -
> -  TmpFitPtr         = (FIT_TABLE *) RelativeAddress;
> -  NumFitComponents  = TmpFitPtr->CompSize;
> -  *FitPtr           = NULL;
> -
> -  for (Index = 0; Index < NumFitComponents; Index++) {
> -    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) == COMP_TYPE_FIT_UNUSED) {
> -      *FitPtr = TmpFitPtr;
> -      break;
> -    }
> -
> -    TmpFitPtr++;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -int
> -CompareItems (
> -  IN const VOID  *Arg1,
> -  IN const VOID  *Arg2
> -  )
> -/*++
> -
> -Routine Description:
> -
> -    This function is used by qsort to sort the FIT table based upon Component
> -    Type in their incresing order.
> -
> -Arguments:
> -
> -    Arg1  -   Pointer to Arg1
> -    Arg2  -   Pointer to Arg2
> -
> -Returns:
> -
> -    None
> -
> ---*/
> -{
> -  if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) > (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
> -    return 1;
> -  } else if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) < (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
> -    return -1;
> -  } else {
> -    return 0;
> -  }
> -}
> -
> -VOID
> -SortFitTable (
> -  IN  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -    This function is used by qsort to sort the FIT table based upon Component
> -    Type in their incresing order.
> -
> -Arguments:
> -
> -    VOID
> -
> -Returns:
> -
> -    None
> -
> ---*/
> -{
> -  FIT_TABLE *FitTable;
> -  FIT_TABLE *TmpFitPtr;
> -  UINTN     NumFitComponents;
> -  UINTN     Index;
> -
> -  GetFitTableStartAddress (&FitTable);
> -  TmpFitPtr         = FitTable;
> -  NumFitComponents  = 0;
> -  for (Index = 0; Index < FitTable->CompSize; Index++) {
> -    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) != COMP_TYPE_FIT_UNUSED) {
> -      NumFitComponents += 1;
> -    }
> -    TmpFitPtr++;
> -  }
> -  qsort ((VOID *) FitTable, NumFitComponents, sizeof (FIT_TABLE), CompareItems);
> -}
> -
> -VOID
> -UpdateFitEntryForFwVolume (
> -  IN  UINT64  Size
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function updates the information about Firmware Volume  in FIT TABLE.
> -  This FIT table has to be immediately below the PAL_A Start and it contains
> -  component type and address information. Other information can't be
> -  created this time so we would need to fix it up..
> -
> -
> -Arguments:
> -
> -  Size   - Firmware Volume Size
> -
> -Returns:
> -
> -  VOID
> -
> ---*/
> -{
> -  FIT_TABLE *CompFitPtr;
> -  UINTN     RelativeAddress;
> -
> -  //
> -  // FV Fit table will be located at PAL_A Startaddress - 16 byte location
> -  //
> -  Vtf1LastStartAddress -= 0x10;
> -  Vtf1TotalSize += 0x10;
> -
> -  GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
> -
> -  CompFitPtr              = (FIT_TABLE *) RelativeAddress;
> -  CompFitPtr->CompAddress = Fv1BaseAddress;
> -
> -  //
> -  // Since we don't have any information about its location in Firmware Volume,
> -  // initialize address to 0. This will be updated once Firmware Volume is
> -  // being build and its current address will be fixed in FIT table. Currently
> -  // we haven't implemented it so far and working on architectural clarafication
> -  //
> -  //
> -  // Firmware Volume Size in 16 byte block
> -  //
> -  CompFitPtr->CompSize = ((UINT32) Size) / 16;
> -
> -  //
> -  // Since Firmware Volume does not exist by the time we create this FIT info
> -  // this should be fixedup from Firmware Volume creation tool. We haven't
> -  // worked out a method so far.
> -  //
> -  CompFitPtr->CompVersion = MAKE_VERSION (0, 0);
> -
> -  //
> -  // Since we don't have any info about this file, we are making sure that
> -  // checksum is not needed.
> -  //
> -  CompFitPtr->CvAndType = CV_N_TYPE (0, COMP_TYPE_FIT_FV_BOOT);
> -
> -  //
> -  // Since non VTF component will reside outside the VTF, we will not have its
> -  // binary image while creating VTF, hence we will not perform checksum at
> -  // this time. Once Firmware Volume is being created which will contain this
> -  // VTF, it will fix the FIT table for all the non VTF component and hence
> -  // checksum
> -  //
> -  CompFitPtr->CheckSum = 0;
> -}
> -
> -EFI_STATUS
> -UpdateFitEntryForNonVTFComp (
> -  IN  PARSED_VTF_INFO   *VtfInfo
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function updates the information about non VTF component in FIT TABLE.
> -  Since non VTF componets binaries are not part of VTF binary, we would still
> -  be required to update its location information in Firmware Volume, inside
> -  FIT table.
> -
> -Arguments:
> -
> -  VtfInfo    - Pointer to VTF Info Structure
> -
> -Returns:
> -
> -  EFI_ABORTED  - The function fails to update the component in FIT
> -  EFI_SUCCESS  - The function completed successfully
> -
> ---*/
> -{
> -  FIT_TABLE *CompFitPtr;
> -
> -  //
> -  // Scan the FIT table for available space
> -  //
> -  GetNextAvailableFitPtr (&CompFitPtr);
> -  if (CompFitPtr == NULL) {
> -    Error (NULL, 0, 5003, "Invalid", "Can't update this component in FIT");
> -    return EFI_ABORTED;
> -  }
> -
> -  //
> -  // Since we don't have any information about its location in Firmware Volume,
> -  // initialize address to 0. This will be updated once Firmware Volume is
> -  // being build and its current address will be fixed in FIT table
> -  //
> -  CompFitPtr->CompAddress = 0;
> -  CompFitPtr->CompSize    = VtfInfo->CompSize;
> -  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
> -  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
> -
> -  //
> -  // Since non VTF component will reside outside the VTF, we will not have its
> -  // binary image while creating VTF, hence we will not perform checksum at
> -  // this time. Once Firmware Volume is being created which will contain this
> -  // VTF, it will fix the FIT table for all the non VTF component and hence
> -  // checksum
> -  //
> -  CompFitPtr->CheckSum = 0;
> -
> -  //
> -  // Fit Type is FV_BOOT which means Firmware Volume, we initialize this to base
> -  // address of Firmware Volume in which this VTF will be attached.
> -  //
> -  if ((CompFitPtr->CvAndType & 0x7F) == COMP_TYPE_FIT_FV_BOOT) {
> -    CompFitPtr->CompAddress = Fv1BaseAddress;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -//
> -// !!!WARNING
> -// This function is updating the SALE_ENTRY in Itanium address space as per SAL
> -// spec. SALE_ENTRY is being read from SYM file of PEICORE. Once the PEI
> -// CORE moves in Firmware Volume, we would need to modify this function to be
> -// used with a API which will detect PEICORE component while building Firmware
> -// Volume and update its entry in FIT table as well as in Itanium address space
> -// as per Intel?Itanium(TM) SAL address space
> -//
> -EFI_STATUS
> -UpdateEntryPoint (
> -  IN  PARSED_VTF_INFO   *VtfInfo,
> -  IN  UINT64            *CompStartAddress
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function updated the architectural entry point in IPF, SALE_ENTRY.
> -
> -Arguments:
> -
> -  VtfInfo            - Pointer to VTF Info Structure
> -  CompStartAddress   - Pointer to Component Start Address
> -
> -Returns:
> -
> -  EFI_INVALID_PARAMETER  - The parameter is invalid
> -  EFI_SUCCESS            - The function completed successfully
> -
> ---*/
> -{
> -  UINTN   RelativeAddress;
> -  UINT64  SalEntryAdd;
> -  FILE    *Fp;
> -  UINTN   Offset;
> -
> -  CHAR8   Buff[FILE_NAME_SIZE];
> -  CHAR8   Buff1[10];
> -  CHAR8   Buff2[10];
> -  CHAR8   OffsetStr[30];
> -  CHAR8   Buff3[10];
> -  CHAR8   Buff4[10];
> -  CHAR8   Buff5[10];
> -  CHAR8   Token[50];
> -  CHAR8   FormatString[MAX_LINE_LEN];
> -
> -  Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");
> -
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompSymName);
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // Generate the format string for fscanf
> -  //
> -  sprintf (
> -    FormatString,
> -    "%%%us %%%us %%%us %%%us %%%us %%%us %%%us",
> -    (unsigned) sizeof (Buff1) - 1,
> -    (unsigned) sizeof (Buff2) - 1,
> -    (unsigned) sizeof (OffsetStr) - 1,
> -    (unsigned) sizeof (Buff3) - 1,
> -    (unsigned) sizeof (Buff4) - 1,
> -    (unsigned) sizeof (Buff5) - 1,
> -    (unsigned) sizeof (Token) - 1
> -    );
> -
> -  while (fgets (Buff, sizeof (Buff), Fp) != NULL) {
> -    fscanf (
> -      Fp,
> -      FormatString,
> -      Buff1,
> -      Buff2,
> -      OffsetStr,
> -      Buff3,
> -      Buff4,
> -      Buff5,
> -      Token
> -      );
> -    if (strnicmp (Token, "SALE_ENTRY", 10) == 0) {
> -      break;
> -    }
> -  }
> -
> -  Offset = strtoul (OffsetStr, NULL, 16);
> -
> -  *CompStartAddress += Offset;
> -  SalEntryAdd = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT);
> -
> -  GetRelativeAddressInVtfBuffer (SalEntryAdd, &RelativeAddress, FIRST_VTF);
> -
> -  memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));
> -
> -  if (Fp != NULL) {
> -    fclose (Fp);
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -CreateAndUpdateComponent (
> -  IN  PARSED_VTF_INFO   *VtfInfo
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function reads the binary file for each components and update them
> -  in VTF Buffer as well as in FIT table. If the component is located in non
> -  VTF area, only the FIT table address will be updated
> -
> -Arguments:
> -
> -  VtfInfo    - 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.
> -                      (c) Fail to get the FIT table address.
> -
> -  EFI_INVALID_PARAMETER     Value returned from call to UpdateEntryPoint()
> -  EFI_OUT_OF_RESOURCES      Memory allocation failure.
> -
> ---*/
> -{
> -  EFI_STATUS  Status;
> -  UINT64      CompStartAddress;
> -  UINT64      FileSize;
> -  UINT64      NumAdjustByte;
> -  UINT8       *Buffer;
> -  FILE        *Fp;
> -  FIT_TABLE   *CompFitPtr;
> -  BOOLEAN     Aligncheck;
> -
> -  if (VtfInfo->LocationType == NONE) {
> -    UpdateFitEntryForNonVTFComp (VtfInfo);
> -    return EFI_SUCCESS;
> -  }
> -
> -  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
> -
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
> -    return EFI_ABORTED;
> -  }
> -
> -  FileSize = _filelength (fileno (Fp));
> -  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
> -
> -    //
> -    // BUGBUG: Satish to correct
> -    //
> -    FileSize -= SIZE_OF_PAL_HEADER;
> -  }
> -
> -  if (VtfInfo->PreferredSize) {
> -    if (FileSize > VtfInfo->CompSize) {
> -      fclose (Fp);
> -      Error (NULL, 0, 2000, "Invalid parameter", "The component size is more than specified size.");
> -      return EFI_ABORTED;
> -    }
> -
> -    FileSize = VtfInfo->CompSize;
> -  }
> -
> -  Buffer = malloc ((UINTN) FileSize);
> -  if (Buffer == NULL) {
> -    fclose (Fp);
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  memset (Buffer, 0, (UINTN) FileSize);
> -
> -  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
> -
> -    //
> -    // Read first 64 bytes of PAL header and use it to find version info
> -    //
> -    fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
> -
> -    //
> -    // PAL header contains the version info. Currently, we will use the header
> -    // to read version info and then discard.
> -    //
> -    if (!VtfInfo->VersionPresent) {
> -      GetComponentVersionInfo (VtfInfo, Buffer);
> -    }
> -  }
> -
> -  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
> -  fclose (Fp);
> -
> -  //
> -  // If it is non PAL_B component, pass the entire buffer to get the version
> -  // info and implement any specific case inside GetComponentVersionInfo.
> -  //
> -  if (VtfInfo->CompType != COMP_TYPE_FIT_PAL_B) {
> -    if (!VtfInfo->VersionPresent) {
> -      GetComponentVersionInfo (VtfInfo, Buffer);
> -    }
> -  }
> -
> -  if (VtfInfo->LocationType == SECOND_VTF) {
> -
> -    CompStartAddress = (Vtf2LastStartAddress - FileSize);
> -  } else {
> -    CompStartAddress = (Vtf1LastStartAddress - FileSize);
> -  }
> -
> -  if (VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) {
> -    Aligncheck = CheckAddressAlignment (CompStartAddress, 32 * 1024, &NumAdjustByte);
> -  } else {
> -    Aligncheck = CheckAddressAlignment (CompStartAddress, 8, &NumAdjustByte);
> -  }
> -
> -  if (!Aligncheck) {
> -    CompStartAddress -= NumAdjustByte;
> -  }
> -
> -  if (VtfInfo->LocationType == SECOND_VTF && SecondVTF == TRUE) {
> -    Vtf2LastStartAddress = CompStartAddress;
> -    Vtf2TotalSize += (UINT32) (FileSize + NumAdjustByte);
> -    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, SECOND_VTF);
> -  } else if (VtfInfo->LocationType == FIRST_VTF) {
> -    Vtf1LastStartAddress = CompStartAddress;
> -    Vtf1TotalSize += (UINT32) (FileSize + NumAdjustByte);
> -    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, FIRST_VTF);
> -  } else {
> -    free (Buffer);
> -    Error (NULL, 0, 2000,"Invalid Parameter", "There's component in second VTF so second BaseAddress and Size must be specified!");
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  if (EFI_ERROR (Status)) {
> -    free (Buffer);
> -    return EFI_ABORTED;
> -  }
> -
> -  GetNextAvailableFitPtr (&CompFitPtr);
> -  if (CompFitPtr == NULL) {
> -    free (Buffer);
> -    return EFI_ABORTED;
> -  }
> -
> -  CompFitPtr->CompAddress = CompStartAddress | IPF_CACHE_BIT;
> -  if ((FileSize % 16) != 0) {
> -    free (Buffer);
> -    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
> -    return EFI_INVALID_PARAMETER;
> -  }
> -  //assert ((FileSize % 16) == 0);
> -  CompFitPtr->CompSize    = (UINT32) (FileSize / 16);
> -  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
> -  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
> -  if (VtfInfo->CheckSumRequired) {
> -    CompFitPtr->CheckSum  = 0;
> -    CompFitPtr->CheckSum  = CalculateChecksum8 (Buffer, (UINTN) FileSize);
> -  }
> -
> -  //
> -  // Free the buffer
> -  //
> -  if (Buffer) {
> -    free (Buffer);
> -  }
> -
> -  //
> -  // Update the SYM file for this component based on it's start address.
> -  //
> -  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
> -  if (EFI_ERROR (Status)) {
> -
> -    //
> -    // At this time, SYM files are not required, so continue on error.
> -    //
> -  }
> -
> -  // !!!!!!!!!!!!!!!!!!!!!
> -  // BUGBUG:
> -  // This part of the code is a temporary line since PEICORE is going to be inside
> -  // VTF till we work out how to determine the SALE_ENTRY through it. We will need
> -  // to clarify so many related questions
> -  // !!!!!!!!!!!!!!!!!!!!!!!
> -
> -  if (VtfInfo->CompType == COMP_TYPE_FIT_PEICORE) {
> -    Status = UpdateEntryPoint (VtfInfo, &CompStartAddress);
> -  }
> -
> -  return Status;
> -}
> -
> -EFI_STATUS
> -CreateAndUpdatePAL_A (
> -  IN  PARSED_VTF_INFO   *VtfInfo
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function reads the binary file for each components and update them
> -  in VTF Buffer as well as FIT table
> -
> -Arguments:
> -
> -  VtfInfo    - 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_OUT_OF_RESOURCES  - Memory allocation failed.
> -
> ---*/
> -{
> -  EFI_STATUS  Status;
> -  UINT64      PalStartAddress;
> -  UINT64      AbsAddress;
> -  UINTN       RelativeAddress;
> -  UINT64      FileSize;
> -  UINT8       *Buffer;
> -  FILE        *Fp;
> -  FIT_TABLE   *PalFitPtr;
> -
> -  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
> -
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
> -    return EFI_ABORTED;
> -  }
> -
> -  FileSize = _filelength (fileno (Fp));
> -  if (FileSize < 64) {
> -    fclose (Fp);
> -    Error (NULL, 0, 2000, "Invalid parameter", "PAL_A bin header is 64 bytes, so the Bin size must be larger than 64 bytes!");
> -    return EFI_INVALID_PARAMETER;
> -  }
> -  FileSize -= SIZE_OF_PAL_HEADER;
> -
> -
> -  if (VtfInfo->PreferredSize) {
> -    if (FileSize > VtfInfo->CompSize) {
> -      fclose (Fp);
> -      Error (NULL, 0, 2000, "Invalid parameter", "The PAL_A Size is more than the specified size.");
> -      return EFI_ABORTED;
> -    }
> -
> -    FileSize = VtfInfo->CompSize;
> -  }
> -
> -  Buffer = malloc ((UINTN) FileSize);
> -  if (Buffer == NULL) {
> -    fclose (Fp);
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  memset (Buffer, 0, (UINTN) FileSize);
> -
> -  //
> -  // Read, Get version Info and discard the PAL header.
> -  //
> -  fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
> -
> -  //
> -  // Extract the version info from header of PAL_A. Once done, discrad this buffer
> -  //
> -  if (!VtfInfo->VersionPresent) {
> -    GetComponentVersionInfo (VtfInfo, Buffer);
> -  }
> -
> -  //
> -  // Read PAL_A file in a buffer
> -  //
> -  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
> -  fclose (Fp);
> -
> -  PalStartAddress       = Fv1EndAddress - (SIZE_TO_OFFSET_PAL_A_END + FileSize);
> -  Vtf1LastStartAddress  = PalStartAddress;
> -  Vtf1TotalSize += (UINT32) FileSize;
> -  Status      = UpdateVtfBuffer (PalStartAddress, Buffer, FileSize, FIRST_VTF);
> -
> -  AbsAddress  = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
> -  GetRelativeAddressInVtfBuffer (AbsAddress, &RelativeAddress, FIRST_VTF);
> -  PalFitPtr               = (FIT_TABLE *) RelativeAddress;
> -  PalFitPtr->CompAddress  = PalStartAddress | IPF_CACHE_BIT;
> -  //assert ((FileSize % 16) == 0);
> -  if ((FileSize % 16) != 0) {
> -    free (Buffer);
> -    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  PalFitPtr->CompSize     = (UINT32) (FileSize / 16);
> -  PalFitPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
> -  PalFitPtr->CvAndType    = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
> -  if (VtfInfo->CheckSumRequired) {
> -    PalFitPtr->CheckSum = 0;
> -    PalFitPtr->CheckSum = CalculateChecksum8 (Buffer, (UINTN) FileSize);
> -  }
> -
> -  if (Buffer) {
> -    free (Buffer);
> -  }
> -
> -  //
> -  // Update the SYM file for this component based on it's start address.
> -  //
> -  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
> -  if (EFI_ERROR (Status)) {
> -
> -    //
> -    // At this time, SYM files are not required, so continue on error.
> -    //
> -  }
> -
> -  return Status;
> -}
> -
> -EFI_STATUS
> -CreateFitTableAndInitialize (
> -  IN  PARSED_VTF_INFO   *VtfInfo
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function creates and intializes FIT table which would be used to
> -  add component info inside this
> -
> -Arguments:
> -
> -  VtfInfo    - Pointer to Parsed Info
> -
> -Returns:
> -
> -  EFI_ABORTED  - Aborted due to no size information
> -  EFI_SUCCESS  - The function completed successfully
> -
> ---*/
> -{
> -  UINT64    PalFitTableAdd;
> -  UINT64    FitTableAdd;
> -  UINT64    FitTableAddressOffset;
> -  FIT_TABLE *PalFitPtr;
> -  FIT_TABLE *FitStartPtr;
> -  UINTN     NumFitComp;
> -  UINTN     RelativeAddress;
> -  UINTN     Index;
> -
> -  if (!VtfInfo->PreferredSize) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "FIT could not be allocated because there is no size information.");
> -    return EFI_ABORTED;
> -  }
> -
> -  if ((VtfInfo->CompSize % 16) != 0) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "Invalid FIT Table Size, it is not a multiple of 16 bytes. Please correct the size.");
> -  }
> -
> -  PalFitTableAdd = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
> -  GetRelativeAddressInVtfBuffer (PalFitTableAdd, &RelativeAddress, FIRST_VTF);
> -  PalFitPtr             = (FIT_TABLE *) RelativeAddress;
> -  PalFitTableAdd        = (PalFitPtr->CompAddress - VtfInfo->CompSize);
> -
> -  FitTableAdd           = (PalFitPtr->CompAddress - 0x10) - VtfInfo->CompSize;
> -  FitTableAddressOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
> -  GetRelativeAddressInVtfBuffer (FitTableAddressOffset, &RelativeAddress, FIRST_VTF);
> -  *(UINT64 *) RelativeAddress = FitTableAdd;
> -
> -  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
> -
> -  //
> -  // Update Fit Table with FIT Signature and FIT info in first 16 bytes.
> -  //
> -  FitStartPtr = (FIT_TABLE *) RelativeAddress;
> -
> -  strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "
> -  assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);
> -  FitStartPtr->CompSize     = (VtfInfo->CompSize & 0x00FFFFFF) / 16;
> -  FitStartPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
> -
> -  //
> -  // BUGBUG: If a checksum is required, add code to checksum the FIT table.  Also
> -  // determine what to do for things like the FV component that aren't easily checksummed.
> -  // The checksum will be done once we are done with all the componet update in the FIT
> -  // table
> -  //
> -  FitStartPtr->CvAndType  = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
> -
> -  NumFitComp              = FitStartPtr->CompSize;
> -
> -  FitStartPtr++;
> -
> -  //
> -  // Intialize remaining FIT table space to UNUSED fit component type
> -  // so that when we need to create a FIT entry for a component, we can
> -  // locate a free one and use it.
> -  //
> -  for (Index = 0; Index < (NumFitComp - 1); Index++) {
> -    FitStartPtr->CvAndType = 0x7F;  // Initialize all with UNUSED
> -    FitStartPtr++;
> -  }
> -
> -  Vtf1TotalSize += VtfInfo->CompSize;
> -  Vtf1LastStartAddress -= VtfInfo->CompSize;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -WriteVtfBinary (
> -  IN CHAR8     *FileName,
> -  IN UINT32    VtfSize,
> -  IN LOC_TYPE  LocType
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Write Firmware Volume from memory to a file.
> -
> -Arguments:
> -
> -  FileName     - Output File Name which needed to be created/
> -  VtfSize      - FileSize
> -  LocType      - The type of the VTF
> -
> -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
> -
> ---*/
> -{
> -  FILE  *Fp;
> -  UINTN NumByte;
> -  VOID  *VtfBuffer;
> -  UINTN RelativeAddress;
> -
> -  if (LocType == FIRST_VTF) {
> -    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
> -    VtfBuffer = (VOID *) RelativeAddress;
> -  } else {
> -    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
> -    VtfBuffer = (VOID *) RelativeAddress;
> -  }
> -
> -  Fp = fopen (LongFilePath (FileName), "wb");
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", FileName);
> -    return EFI_ABORTED;
> -  }
> -
> -  NumByte = fwrite (VtfBuffer, sizeof (UINT8), (UINTN) VtfSize, Fp);
> -
> -  if (Fp) {
> -    fclose (Fp);
> -  }
> -
> -  if (NumByte != (sizeof (UINT8) * VtfSize)) {
> -    Error (NULL, 0, 0002, "Error writing file", FileName);
> -    return EFI_ABORTED;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -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: First or Second
> -
> -Returns:
> -
> -  EFI_ABORTED  - The input parameter is error
> -  EFI_SUCCESS  - The function completed successfully
> -
> ---*/
> -{
> -  UINT8 *LocalBufferPtrToWrite;
> -
> -  if (LocType == FIRST_VTF) {
> -    if ((StartAddress | IPF_CACHE_BIT) < (Vtf1LastStartAddress | IPF_CACHE_BIT)) {
> -      Error (NULL, 0, 2000, "Invalid parameter", "Start Address is less than the VTF start address.");
> -      return EFI_ABORTED;
> -    }
> -
> -    LocalBufferPtrToWrite = (UINT8 *) Vtf1EndBuffer;
> -
> -    LocalBufferPtrToWrite -= (Fv1EndAddress - StartAddress);
> -
> -  } else {
> -
> -    if ((StartAddress | IPF_CACHE_BIT) < (Vtf2LastStartAddress | IPF_CACHE_BIT)) {
> -      Error (NULL, 0, 2000, "Invalid parameter", "Error StartAddress");
> -      return EFI_ABORTED;
> -    }
> -    LocalBufferPtrToWrite = (UINT8 *) Vtf2EndBuffer;
> -    LocalBufferPtrToWrite -= (Fv2EndAddress - StartAddress);
> -  }
> -
> -  memcpy (LocalBufferPtrToWrite, Buffer, (UINTN) DataSize);
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -UpdateFfsHeader (
> -  IN UINT32         TotalVtfSize,
> -  IN LOC_TYPE       LocType
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Update the Firmware Volume Buffer with requested buffer data
> -
> -Arguments:
> -
> -  TotalVtfSize     - Size of the VTF
> -  Fileoffset       - The start of the file relative to the start of the FV.
> -  LocType          - The type of the VTF
> -
> -Returns:
> -
> -  EFI_SUCCESS            - The function completed successfully
> -  EFI_INVALID_PARAMETER  - The Ffs File Header Pointer is NULL
> -
> ---*/
> -{
> -  EFI_FFS_FILE_HEADER *FileHeader;
> -  UINTN               RelativeAddress;
> -  EFI_GUID            EfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;
> -
> -  //
> -  // Find the VTF file header location
> -  //
> -  if (LocType == FIRST_VTF) {
> -    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
> -    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
> -  } else {
> -    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
> -    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
> -  }
> -
> -  if (FileHeader == NULL) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // write header
> -  //
> -  memset (FileHeader, 0, sizeof (EFI_FFS_FILE_HEADER));
> -  memcpy (&FileHeader->Name, &EfiFirmwareVolumeTopFileGuid, sizeof (EFI_GUID));
> -  FileHeader->Type        = EFI_FV_FILETYPE_RAW;
> -  FileHeader->Attributes  = FFS_ATTRIB_CHECKSUM;
> -
> -  //
> -  // Now FileSize includes the EFI_FFS_FILE_HEADER
> -  //
> -  FileHeader->Size[0] = (UINT8) (TotalVtfSize & 0x000000FF);
> -  FileHeader->Size[1] = (UINT8) ((TotalVtfSize & 0x0000FF00) >> 8);
> -  FileHeader->Size[2] = (UINT8) ((TotalVtfSize & 0x00FF0000) >> 16);
> -
> -  //
> -  // Fill in checksums and state, all three must be zero for the checksums.
> -  //
> -  FileHeader->IntegrityCheck.Checksum.Header  = 0;
> -  FileHeader->IntegrityCheck.Checksum.File    = 0;
> -  FileHeader->State                           = 0;
> -  FileHeader->IntegrityCheck.Checksum.Header  = CalculateChecksum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));
> -  FileHeader->IntegrityCheck.Checksum.File    = CalculateChecksum8 ((UINT8 *) (FileHeader + 1), TotalVtfSize - sizeof
> (EFI_FFS_FILE_HEADER));
> -  FileHeader->State                           = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID |
> EFI_FILE_DATA_VALID;
> -
> -  return EFI_SUCCESS;
> -}
> -
> -EFI_STATUS
> -ValidateAddressAndSize (
> -  IN  UINT64  BaseAddress,
> -  IN  UINT64  FwVolSize
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Update the Firmware Volume Buffer with requested buffer data
> -
> -Arguments:
> -
> -  BaseAddress    - Base address for the Fw Volume.
> -
> -  FwVolSize      - Total Size of the FwVolume to which VTF will be attached..
> -
> -Returns:
> -
> -  EFI_SUCCESS     - The function completed successfully
> -  EFI_UNSUPPORTED - The input parameter is error
> -
> ---*/
> -{
> -  if ((FwVolSize > 0x40) && ((BaseAddress + FwVolSize) % 8 == 0)) {
> -    return EFI_SUCCESS;
> -  }
> -
> -  return EFI_UNSUPPORTED;
> -}
> -
> -EFI_STATUS
> -UpdateIA32ResetVector (
> -  IN  CHAR8   *FileName,
> -  IN  UINT64  FirstFwVSize
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Update the 16 byte IA32 Reset vector to maintain the compatibility
> -
> -Arguments:
> -
> -  FileName     - Binary file name which contains the IA32 Reset vector info..
> -  FirstFwVSize - Total Size of the FwVolume to which VTF will be attached..
> -
> -Returns:
> -
> -  EFI_SUCCESS            - The function completed successfully
> -  EFI_ABORTED            - Invalid File Size
> -  EFI_INVALID_PARAMETER  - Bad File Name
> -  EFI_OUT_OF_RESOURCES   - Memory allocation failed.
> -
> ---*/
> -{
> -  UINT8 *Buffer;
> -  UINT8 *LocalVtfBuffer;
> -  UINTN FileSize;
> -  FILE  *Fp;
> -
> -  if (!strcmp (FileName, "")) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  Fp = fopen (LongFilePath (FileName), "rb");
> -
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", FileName);
> -    return EFI_ABORTED;
> -  }
> -
> -  FileSize = _filelength (fileno (Fp));
> -
> -  if (FileSize > 16) {
> -    fclose (Fp);
> -    return EFI_ABORTED;
> -  }
> -
> -  Buffer = malloc (FileSize);
> -  if (Buffer == NULL) {
> -    fclose (Fp);
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -
> -  fread (Buffer, sizeof (UINT8), FileSize, Fp);
> -
> -  LocalVtfBuffer  = (UINT8 *) Vtf1EndBuffer - SIZE_IA32_RESET_VECT;
> -  memcpy (LocalVtfBuffer, Buffer, FileSize);
> -
> -  if (Buffer) {
> -    free (Buffer);
> -  }
> -
> -  if (Fp != NULL) {
> -    fclose (Fp);
> -  }
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -CleanUpMemory (
> -  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function cleans up any allocated buffer
> -
> -Arguments:
> -
> -  NONE
> -
> -Returns:
> -
> -  NONE
> -
> ---*/
> -{
> -  PARSED_VTF_INFO *TempFileListPtr;
> -
> -  if (Vtf1Buffer) {
> -    free (Vtf1Buffer);
> -  }
> -
> -  if (Vtf2Buffer) {
> -    free (Vtf2Buffer);
> -  }
> -
> -  //
> -  // Cleanup the buffer which was allocated to read the file names from FV.INF
> -  //
> -  FileListPtr = FileListHeadPtr;
> -  while (FileListPtr != NULL) {
> -    TempFileListPtr = FileListPtr->NextVtfInfo;
> -    free (FileListPtr);
> -    FileListPtr = TempFileListPtr;
> -  }
> -}
> -
> -EFI_STATUS
> -ProcessAndCreateVtf (
> -  IN  UINT64  Size
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This function process the link list created during INF file parsing
> -  and create component in VTF and updates its info in FIT table
> -
> -Arguments:
> -
> -  Size   - Size of the Firmware Volume of which, this VTF belongs to.
> -
> -Returns:
> -
> -  EFI_UNSUPPORTED - Unknown FIT type
> -  EFI_SUCCESS     - The function completed successfully
> -
> ---*/
> -{
> -  EFI_STATUS      Status;
> -  PARSED_VTF_INFO *ParsedInfoPtr;
> -
> -  Status        = EFI_SUCCESS;
> -
> -  ParsedInfoPtr = FileListHeadPtr;
> -
> -  while (ParsedInfoPtr != NULL) {
> -
> -    switch (ParsedInfoPtr->CompType) {
> -    //
> -    // COMP_TYPE_FIT_HEADER is a special case, hence handle it here
> -    //
> -    case COMP_TYPE_FIT_HEADER:
> -      //COMP_TYPE_FIT_HEADER          0x00
> -      Status = CreateFitTableAndInitialize (ParsedInfoPtr);
> -      break;
> -
> -    //
> -    // COMP_TYPE_FIT_PAL_A is a special case, hence handle it here
> -    //
> -    case COMP_TYPE_FIT_PAL_A:
> -      //COMP_TYPE_FIT_PAL_A           0x0F
> -      Status = CreateAndUpdatePAL_A (ParsedInfoPtr);
> -
> -      //
> -      // Based on VTF specification, once the PAL_A component has been written,
> -      // update the Firmware Volume info as FIT table. This will be utilized
> -      // to extract the Firmware Volume Start address where this VTF will be
> -      // of part.
> -      //
> -      if (Status == EFI_SUCCESS) {
> -        UpdateFitEntryForFwVolume (Size);
> -      }
> -      break;
> -
> -    case COMP_TYPE_FIT_FV_BOOT:
> -      //COMP_TYPE_FIT_FV_BOOT         0x7E
> -      //
> -      // Since FIT entry for Firmware Volume has been created and it is
> -      // located at (PAL_A start - 16 byte). So we will not process any
> -      // Firmware Volume related entry from INF file
> -      //
> -      Status = EFI_SUCCESS;
> -      break;
> -
> -    default:
> -      //
> -      // Any other component type should be handled here. This will create the
> -      // image in specified VTF and create appropriate entry about this
> -      // component in FIT Entry.
> -      //
> -      Status = CreateAndUpdateComponent (ParsedInfoPtr);
> -      if (EFI_ERROR (Status)) {
> -        Error (NULL, 0, 0002, "Error updating component", ParsedInfoPtr->CompName);
> -        return EFI_ABORTED;
> -      } else {
> -      break;}
> -    }
> -
> -    ParsedInfoPtr = ParsedInfoPtr->NextVtfInfo;
> -  }
> -  return Status;
> -}
> -
> -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
> -  fp             - The pointer to BSF inf file
> -
> -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  Status;
> -  FILE            *VtfFP;
> -
> -  Status          = EFI_UNSUPPORTED;
> -  VtfFP = fp;
> -
> -  if (StartAddress2 == 0) {
> -    SecondVTF = FALSE;
> -  } else {
> -    SecondVTF = TRUE;
> -  }
> -
> -  Fv1BaseAddress        = StartAddress1;
> -  Fv1EndAddress         = Fv1BaseAddress + Size1;
> -  if (Fv1EndAddress != 0x100000000ULL || Size1 < 0x100000) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
> -    if (Size1 < 0x100000) {
> -      Error (NULL, 0, 2000, "Invalid parameter", "The FwVolumeSize must be larger than 1M!");
> -    } else if (SecondVTF != TRUE) {
> -      Error (NULL, 0, 2000, "Invalid parameter", "BaseAddress + FwVolumeSize must equal 0x100000000!");
> -    }
> -    Usage();
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // The image buffer for the First VTF
> -  //
> -  Vtf1Buffer = malloc ((UINTN) Size1);
> -  if (Vtf1Buffer == NULL) {
> -    Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  memset (Vtf1Buffer, 0x00, (UINTN) Size1);
> -  Vtf1EndBuffer         = (UINT8 *) Vtf1Buffer + Size1;
> -  Vtf1LastStartAddress  = Fv1EndAddress | IPF_CACHE_BIT;
> -
> -  if (SecondVTF) {
> -    Fv2BaseAddress        = StartAddress2;
> -    Fv2EndAddress         = Fv2BaseAddress + Size2;
> -    if (Fv2EndAddress != StartAddress1) {
> -      Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
> -      if (SecondVTF == TRUE) {
> -        Error (NULL, 0, 2000, "Invalid parameter", "FirstBaseAddress + FirstFwVolumeSize must equal 0x100000000!");
> -        Error (NULL, 0, 2000, "Invalid parameter", "SecondBaseAddress + SecondFwVolumeSize must equal FirstBaseAddress!");
> -      }
> -      Usage();
> -      return EFI_INVALID_PARAMETER;
> -    }
> -
> -    //
> -    // The image buffer for the second VTF
> -    //
> -    Vtf2Buffer = malloc ((UINTN) Size2);
> -    if (Vtf2Buffer == NULL) {
> -      Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
> -      return EFI_OUT_OF_RESOURCES;
> -    }
> -    memset (Vtf2Buffer, 0x00, (UINTN) Size2);
> -    Vtf2EndBuffer         = (UINT8 *) Vtf2Buffer + Size2;
> -    Vtf2LastStartAddress  = Fv2EndAddress | IPF_CACHE_BIT;
> -  }
> -
> -  Status = GetVtfRelatedInfoFromInfFile (VtfFP);
> -
> -  if (Status != EFI_SUCCESS) {
> -    Error (NULL, 0, 0003, "Error parsing file", "the input file.");
> -    CleanUpMemory ();
> -    return Status;
> -  }
> -
> -  Status = ProcessAndCreateVtf (Size1);
> -  if (Status != EFI_SUCCESS) {
> -    CleanUpMemory ();
> -    return Status;
> -  }
> -
> -  if (SectionOptionFlag) {
> -    Status = UpdateIA32ResetVector (IA32BinFile, Vtf1TotalSize);
> -    if (Status != EFI_SUCCESS) {
> -      CleanUpMemory ();
> -      return Status;
> -    }
> -  }
> -
> -  //
> -  // Re arrange the FIT Table for Ascending order of their FIT Type..
> -  //
> -  SortFitTable ();
> -
> -  //
> -  // All components have been updated in FIT table. Now perform the FIT table
> -  // checksum. The following function will check if Checksum is required,
> -  // if yes, then it will perform the checksum otherwise not.
> -  //
> -  CalculateFitTableChecksum ();
> -
> -  //
> -  // Write the FFS header
> -  //
> -  Vtf1TotalSize += sizeof (EFI_FFS_FILE_HEADER);
> -  Vtf1LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
> -
> -  Status = UpdateFfsHeader (Vtf1TotalSize, FIRST_VTF);
> -  if (Status != EFI_SUCCESS) {
> -    CleanUpMemory ();
> -    return Status;
> -  }
> -  //
> -  // Update the VTF buffer into specified VTF binary file
> -  //
> -  Status  = WriteVtfBinary (OutFileName1, Vtf1TotalSize, FIRST_VTF);
> -
> -  if (SecondVTF) {
> -    Vtf2TotalSize += sizeof (EFI_FFS_FILE_HEADER);
> -    Vtf2LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
> -    Status = UpdateFfsHeader (Vtf2TotalSize, SECOND_VTF);
> -    if (Status != EFI_SUCCESS) {
> -      CleanUpMemory ();
> -      return Status;
> -    }
> -
> -    //
> -    // Update the VTF buffer into specified VTF binary file
> -    //
> -    Status  = WriteVtfBinary (OutFileName2, Vtf2TotalSize, SECOND_VTF);
> -  }
> -
> -  CleanUpMemory ();
> -
> -  return Status;
> -}
> -
> -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_OUT_OF_RESOURCES - System out of resources for memory allocation.
> -
> ---*/
> -{
> -  EFI_STATUS  Status;
> -  FILE        *Fp;
> -  UINT64      *StartAddressPtr;
> -  UINTN       FirstFwVSize;
> -
> -  StartAddressPtr   = malloc (sizeof (UINT64));
> -  if (StartAddressPtr == NULL) {
> -    return EFI_OUT_OF_RESOURCES;
> -  }
> -  *StartAddressPtr = StartAddress;
> -
> -  Fp = fopen (LongFilePath (OutFileName1), "rb");
> -
> -  if (Fp == NULL) {
> -    Error (NULL, 0, 0001, "Error opening file", OutFileName1);
> -    if (StartAddressPtr) {
> -      free (StartAddressPtr);
> -    }
> -    return EFI_ABORTED;
> -  }
> -
> -  FirstFwVSize = _filelength (fileno (Fp));
> -  fseek (Fp, (long) (FirstFwVSize - (UINTN) (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT)), SEEK_SET);
> -  fwrite ((VOID *) StartAddressPtr, sizeof (UINT64), 1, Fp);
> -
> -  if (Fp) {
> -    fclose (Fp);
> -  }
> -
> -  if (StartAddressPtr) {
> -    free (StartAddressPtr);
> -  }
> -
> -  Status = EFI_SUCCESS;
> -  return Status;
> -}
> -
> -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.
> -
> ---*/
> -{
> -  FILE    *SourceFile;
> -  FILE    *DestFile;
> -  CHAR8   Buffer[MAX_LONG_FILE_PATH];
> -  CHAR8   Type[MAX_LONG_FILE_PATH];
> -  CHAR8   Address[MAX_LONG_FILE_PATH];
> -  CHAR8   Section[MAX_LONG_FILE_PATH];
> -  CHAR8   Token[MAX_LONG_FILE_PATH];
> -  CHAR8   BaseToken[MAX_LONG_FILE_PATH];
> -  CHAR8   FormatString[MAX_LINE_LEN];
> -  UINT64  TokenAddress;
> -  long    StartLocation;
> -
> -  //
> -  // Verify input parameters.
> -  //
> -  if (BaseAddress == 0 || DestFileName == NULL || SourceFileName == NULL) {
> -    return EFI_INVALID_PARAMETER;
> -  }
> -
> -  //
> -  // Open the source file
> -  //
> -  SourceFile = fopen (LongFilePath (SourceFileName), "r");
> -  if (SourceFile == NULL) {
> -
> -    //
> -    // SYM files are not required.
> -    //
> -    return EFI_SUCCESS;
> -  }
> -
> -  //
> -  // Use the file name minus extension as the base for tokens
> -  //
> -  if (strlen (SourceFileName) >= MAX_LONG_FILE_PATH) {
> -    fclose (SourceFile);
> -    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
> -    return EFI_ABORTED;
> -  }
> -  strncpy (BaseToken, SourceFileName, MAX_LONG_FILE_PATH - 1);
> -  BaseToken[MAX_LONG_FILE_PATH - 1] = 0;
> -  strtok (BaseToken, ". \t\n");
> -  if (strlen (BaseToken) + strlen ("__") >= MAX_LONG_FILE_PATH) {
> -    fclose (SourceFile);
> -    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
> -    return EFI_ABORTED;
> -  }
> -  strncat (BaseToken, "__", MAX_LONG_FILE_PATH - strlen (BaseToken) - 1);
> -
> -  //
> -  // Open the destination file
> -  //
> -  DestFile = fopen (LongFilePath (DestFileName), "a+");
> -  if (DestFile == NULL) {
> -    fclose (SourceFile);
> -    Error (NULL, 0, 0001, "Error opening file", DestFileName);
> -    return EFI_ABORTED;
> -  }
> -
> -  //
> -  // If this is the beginning of the output file, write the symbol format info.
> -  //
> -  if (fseek (DestFile, 0, SEEK_END) != 0) {
> -    fclose (SourceFile);
> -    fclose (DestFile);
> -    Error (NULL, 0, 2000, "Invalid parameter", "not at the beginning of the output file.");
> -    return EFI_ABORTED;
> -  }
> -
> -  StartLocation = ftell (DestFile);
> -
> -  if (StartLocation == 0) {
> -    fprintf (DestFile, "TEXTSYM format | V1.0\n");
> -  } else if (StartLocation == -1) {
> -    fclose (SourceFile);
> -    fclose (DestFile);
> -    Error (NULL, 0, 2000, "Invalid parameter", "StartLocation error");
> -    return EFI_ABORTED;
> -  }
> -
> -  //
> -  // Read the first line
> -  //
> -  if (fgets (Buffer, MAX_LONG_FILE_PATH, SourceFile) == NULL) {
> -    Buffer[0] = 0;
> -  }
> -
> -  //
> -  // Make sure it matches the expected sym format
> -  //
> -  if (strcmp (Buffer, "TEXTSYM format | V1.0\n")) {
> -    fclose (SourceFile);
> -    fclose (DestFile);
> -    Error (NULL, 0, 2000, "Invalid parameter", "The symbol file does not match the expected TEXTSYM format (V1.0.)");
> -    return EFI_ABORTED;
> -  }
> -
> -  //
> -  // Generate the format string for fscanf
> -  //
> -  sprintf (
> -    FormatString,
> -    "%%%us | %%%us | %%%us | %%%us\n",
> -    (unsigned) sizeof (Type) - 1,
> -    (unsigned) sizeof (Address) - 1,
> -    (unsigned) sizeof (Section) - 1,
> -    (unsigned) sizeof (Token) - 1
> -    );
> -
> -  //
> -  // Read in the file
> -  //
> -  while (feof (SourceFile) == 0) {
> -
> -    //
> -    // Read a line
> -    //
> -    if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) == 4) {
> -
> -      //
> -      // Get the token address
> -      //
> -      AsciiStringToUint64 (Address, TRUE, &TokenAddress);
> -      if (TokenAddress > FileSize) {
> -        //
> -        // Symbol offset larger than FileSize. This Symbol can't be in Bin file. Don't print them.
> -        //
> -        break;
> -      }
> -
> -      //
> -      // Add the base address, the size of the FFS file header and the size of the peim header.
> -      //
> -      TokenAddress += BaseAddress &~IPF_CACHE_BIT;
> -
> -      fprintf (DestFile, "%s | %016llX | ", Type, (unsigned long long) TokenAddress);
> -      fprintf (DestFile, "%s | %s\n    %s\n", Section, Token, BaseToken);
> -    }
> -  }
> -
> -  fclose (SourceFile);
> -  fclose (DestFile);
> -  return EFI_SUCCESS;
> -}
> -
> -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
> -
> ---*/
> -{
> -  FIT_TABLE *TmpFitPtr;
> -  UINT64    FitTableAdd;
> -  UINT64    FitTableAddOffset;
> -  UINTN     RelativeAddress;
> -  UINTN     Size;
> -
> -  //
> -  // Read the Fit Table address from Itanium-based address map.
> -  //
> -  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
> -
> -  //
> -  // Translate this Itanium-based address in terms of local buffer address which
> -  // contains the image for Boot Strapped File
> -  //
> -  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
> -  FitTableAdd = *(UINTN *) RelativeAddress;
> -
> -  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
> -
> -  TmpFitPtr = (FIT_TABLE *) RelativeAddress;
> -
> -  Size      = TmpFitPtr->CompSize * 16;
> -
> -  if ((TmpFitPtr->CvAndType & CHECKSUM_BIT_MASK) >> 7) {
> -    TmpFitPtr->CheckSum = 0;
> -    TmpFitPtr->CheckSum = CalculateChecksum8 ((UINT8 *) TmpFitPtr, Size);
> -  } else {
> -    TmpFitPtr->CheckSum = 0;
> -  }
> -
> -  return EFI_SUCCESS;
> -}
> -
> -VOID
> -Version (
> -  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Displays the standard utility information to SDTOUT
> -
> -Arguments:
> -
> -  None
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION,
> __BUILD_VERSION);
> -}
> -
> -VOID
> -Usage (
> -  VOID
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  Displays the utility usage syntax to STDOUT
> -
> -Arguments:
> -
> -  None
> -
> -Returns:
> -
> -  None
> -
> ---*/
> -{
> -  //
> -  // Summary usage
> -  //
> -  fprintf (stdout, "Usage: %s [options] <-f input_file> <-r BaseAddress> <-s FwVolumeSize>\n\n", UTILITY_NAME);
> -
> -  //
> -  // Copyright declaration
> -  //
> -  fprintf (stdout, "Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.\n\n");
> -  //
> -  // Details Option
> -  //
> -  fprintf (stdout, "Options:\n");
> -  fprintf (stdout, "  -f Input_file,   --filename Input_file\n\
> -                        Input_file is name of the BS Image INF file\n");
> -  fprintf (stdout, "  -r BaseAddress,  --baseaddr BaseAddress\n\
> -                        BaseAddress is the starting address of Firmware Volume\n\
> -                        where Boot Strapped Image will reside.\n");
> -  fprintf (stdout, "  -s FwVolumeSize, --size FwVolumeSize\n\
> -                        FwVolumeSize is the size of Firmware Volume.\n");
> -  fprintf (stdout, "  -o FileName,     --output FileName\n\
> -                        File will be created to store the ouput content.\n");
> -  fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");
> -  fprintf (stdout, "  --version             Show program's version number and exit.\n");
> -  fprintf (stdout, "  -h, --help            Show this help message and exit.\n");
> -  fprintf (stdout, "  -q, --quiet           Disable all messages except FATAL ERRORS.\n");
> -  fprintf (stdout, "  -d, --debug [#, 0-9]  Enable debug messages at level #.\n");
> -}
> -
> -int
> -main (
> -  IN  int  argc,
> -  IN  char  **argv
> -  )
> -/*++
> -
> -Routine Description:
> -
> -  This utility uses GenVtf.dll to build a Boot Strap File Image which will be
> -  part of firmware volume image.
> -
> -Arguments:
> -
> -  argc   - The count of the parameters
> -  argv   - The parameters
> -
> -
> -Returns:
> -
> -  0   - No error conditions detected.
> -  1   - One or more of the input parameters is invalid.
> -  2   - A resource required by the utility was unavailable.
> -      - Most commonly this will be memory allocation or file creation.
> -  3   - GenFvImage.dll could not be loaded.
> -  4   - Error executing the GenFvImage dll.
> -  5   - Now this tool does not support the IA32 platform
> -
> ---*/
> -{
> -  UINT8          Index;
> -  UINT64         StartAddress1;
> -  UINT64         StartAddress2;
> -  UINT64         FwVolSize1;
> -  UINT64         FwVolSize2;
> -  BOOLEAN       FirstRoundO;
> -  BOOLEAN       FirstRoundB;
> -  BOOLEAN       FirstRoundS;
> -  EFI_STATUS    Status;
> -  FILE          *VtfFP;
> -  CHAR8         *VtfFileName;
> -
> -  SetUtilityName (UTILITY_NAME);
> -
> -  //
> -  // Initialize variables
> -  //
> -  StartAddress1 = 0;
> -  StartAddress2 = 0;
> -  FwVolSize1    = 0;
> -  FwVolSize2    = 0;
> -  FirstRoundB   = TRUE;
> -  FirstRoundS   = TRUE;
> -  FirstRoundO   = TRUE;
> -  DebugMode     = FALSE;
> -  OutFileName1  = NULL;
> -  OutFileName2  = NULL;
> -  VtfFP = NULL;
> -  DebugLevel = 0;
> -
> -  //
> -  // Verify the correct number of arguments
> -  //
> -  if (argc == 1) {
> -    Usage();
> -    return 0;
> -  }
> -
> -  if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
> -    Usage();
> -    return 0;
> -  }
> -
> -  if ((strcmp(argv[1], "--version") == 0)) {
> -    Version();
> -    return 0;
> -  }
> -
> -  //
> -  // Parse the command line arguments
> -  //
> -  for (Index = 1; Index < argc; Index += 2) {
> -    if ((stricmp (argv[Index], "-o") == 0) || (stricmp (argv[Index], "--output") == 0)) {
> -      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
> -        Error (NULL, 0, 1003, "Invalid option value", "Output file is missing for -o option");
> -        goto ERROR;
> -      }
> -      //
> -      // Get the output file name
> -      //
> -      VTF_OUTPUT = TRUE;
> -      if (FirstRoundO) {
> -        //
> -        // It's the first output file name
> -        //
> -        OutFileName1 = (CHAR8 *)argv[Index+1];
> -        FirstRoundO = FALSE;
> -      } else {
> -        //
> -        //It's the second output file name
> -        //
> -        OutFileName2 = (CHAR8 *)argv[Index+1];
> -      }
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-f") == 0) || (stricmp (argv[Index], "--filename") == 0)) {
> -      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
> -        Error (NULL, 0, 1003, "Invalid option value", "BS Image INF file is missing for -f option");
> -        goto ERROR;
> -      }
> -      //
> -      // Get the input VTF file name
> -      //
> -      VtfFileName = argv[Index+1];
> -      if (VtfFP != NULL) {
> -        //
> -        // VTF file name has been given previously, override with the new value
> -        //
> -        fclose (VtfFP);
> -      }
> -      VtfFP = fopen (LongFilePath (VtfFileName), "rb");
> -      if (VtfFP == NULL) {
> -        Error (NULL, 0, 0001, "Error opening file", VtfFileName);
> -        goto ERROR;
> -      }
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-r") == 0) || (stricmp (argv[Index], "--baseaddr") == 0)) {
> -      if (FirstRoundB) {
> -        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress1);
> -        FirstRoundB = FALSE;
> -      } else {
> -        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress2);
> -      }
> -      if (Status != EFI_SUCCESS) {
> -        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV start address.", argv[Index + 1]);
> -        goto ERROR;
> -      }
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-s") == 0) || (stricmp (argv[Index], "--size") == 0)) {
> -      if (FirstRoundS) {
> -        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize1);
> -        FirstRoundS = FALSE;
> -      } else {
> -        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize2);
> -        SecondVTF = TRUE;
> -      }
> -
> -      if (Status != EFI_SUCCESS) {
> -        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV size.", argv[Index + 1]);
> -        goto ERROR;
> -      }
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-v") == 0) || (stricmp (argv[Index], "--verbose") == 0)) {
> -      VerboseMode = TRUE;
> -      Index--;
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-q") == 0) || (stricmp (argv[Index], "--quiet") == 0)) {
> -      QuietMode = TRUE;
> -      Index--;
> -      continue;
> -    }
> -
> -    if ((stricmp (argv[Index], "-d") == 0) || (stricmp (argv[Index], "--debug") == 0)) {
> -      //
> -      // debug level specified
> -      //
> -      Status = AsciiStringToUint64(argv[Index + 1], FALSE, &DebugLevel);
> -      if (EFI_ERROR (Status)) {
> -        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[Index], argv[Index + 1]);
> -        goto ERROR;
> -      }
> -      if (DebugLevel > 9)  {
> -        Error (NULL, 0, 2000, "Invalid option value", "Unrecognized argument %s.", argv[Index + 1]);
> -        goto ERROR;
> -      }
> -      if((DebugLevel <= 9) &&(DebugLevel >= 5)) {
> -        DebugMode = TRUE;
> -      } else {
> -        DebugMode = FALSE;
> -      }
> -      continue;
> -    }
> -
> -    Error (NULL, 0, 2000, "Invalid parameter", "Unrecognized argument %s.", argv[Index]);
> -    goto ERROR;
> -  }
> -
> -  if (VtfFP == NULL) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "No BS Image INF file is specified");
> -    goto ERROR;
> -  }
> -
> -  if (FirstRoundB) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "No FV base address is specified");
> -    goto ERROR;
> -  }
> -
> -  if (FirstRoundS) {
> -    Error (NULL, 0, 2000, "Invalid parameter", "No FV Size is specified");
> -    goto ERROR;
> -  }
> -  //
> -  // All Parameters has been parsed, now set the message print level
> -  //
> -  if (QuietMode) {
> -    SetPrintLevel(40);
> -  } else if (VerboseMode) {
> -    SetPrintLevel(15);
> -  } else if (DebugMode) {
> -    SetPrintLevel(DebugLevel);
> -  }
> -
> -  if (VerboseMode) {
> -    VerboseMsg("%s tool start.\n", UTILITY_NAME);
> -  }
> -
> -  if (VTF_OUTPUT == FALSE) {
> -    if (SecondVTF == TRUE) {
> -      OutFileName1 = VTF_OUTPUT_FILE1;
> -      OutFileName2 = VTF_OUTPUT_FILE2;
> -    } else {
> -      OutFileName1 = VTF_OUTPUT_FILE1;
> -    }
> -    SymFileName = VTF_SYM_FILE;
> -  } else {
> -    INTN OutFileNameLen;
> -    INTN NewIndex;
> -
> -    assert (OutFileName1);
> -    OutFileNameLen = strlen(OutFileName1);
> -
> -    for (NewIndex = OutFileNameLen; NewIndex > 0; --NewIndex) {
> -      if (OutFileName1[NewIndex] == '/' || OutFileName1[NewIndex] == '\\') {
> -        break;
> -      }
> -    }
> -    if (NewIndex == 0) {
> -      SymFileName = VTF_SYM_FILE;
> -    } else {
> -      INTN SymFileNameLen = NewIndex + 1 + strlen(VTF_SYM_FILE);
> -      SymFileName = malloc(SymFileNameLen + 1);
> -      if (SymFileName == NULL) {
> -        Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
> -        goto ERROR;
> -      }
> -      memcpy(SymFileName, OutFileName1, NewIndex + 1);
> -      memcpy(SymFileName + NewIndex + 1, VTF_SYM_FILE, strlen(VTF_SYM_FILE));
> -      SymFileName[SymFileNameLen] = '\0';
> -    }
> -    if (DebugMode) {
> -      DebugMsg(UTILITY_NAME, 0, DebugLevel, SymFileName, NULL);
> -    }
> -  }
> -
> -  //
> -  // Call the GenVtfImage
> -  //
> -  if (DebugMode) {
> -    DebugMsg(UTILITY_NAME, 0, DebugLevel, "Start to generate the VTF image\n", NULL);
> -  }
> -  Status = GenerateVtfImage (StartAddress1, FwVolSize1, StartAddress2, FwVolSize2, VtfFP);
> -
> -  if (EFI_ERROR (Status)) {
> -    switch (Status) {
> -
> -    case EFI_INVALID_PARAMETER:
> -      Error (NULL, 0, 2000, "Invalid parameter", "Invalid parameter passed to GenVtf function.");
> -      break;
> -
> -    case EFI_ABORTED:
> -      Error (NULL, 0, 3000, "Invalid", "Error detected while creating the file image.");
> -      break;
> -
> -    case EFI_OUT_OF_RESOURCES:
> -      Error (NULL, 0, 4002, "Resource", "GenVtfImage function could not allocate required resources.");
> -      break;
> -
> -    case EFI_VOLUME_CORRUPTED:
> -      Error (NULL, 0, 3000, "Invalid", "No base address was specified.");
> -      break;
> -
> -    default:
> -      Error (NULL, 0, 3000, "Invalid", "GenVtfImage function returned unknown status %x.", (int) Status );
> -      break;
> -    }
> -  }
> -ERROR:
> -  if (VtfFP != NULL) {
> -    fclose (VtfFP);
> -  }
> -
> -  if (DebugMode) {
> -    DebugMsg(UTILITY_NAME, 0, DebugLevel, "VTF image generated successful\n", NULL);
> -  }
> -
> -  if (VerboseMode) {
> -    VerboseMsg("%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());
> -  }
> -  return GetUtilityStatus();
> -}
> diff --git a/BaseTools/Source/C/GenVtf/GenVtf.h b/BaseTools/Source/C/GenVtf/GenVtf.h
> deleted file mode 100644
> index 62c61aa84e..0000000000
> --- a/BaseTools/Source/C/GenVtf/GenVtf.h
> +++ /dev/null
> @@ -1,326 +0,0 @@
> -/** @file
> -This file contains the relevant declarations required to generate Boot Strap File
> -
> -Copyright (c) 1999 - 2018, 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
> diff --git a/BaseTools/Source/C/GenVtf/Makefile b/BaseTools/Source/C/GenVtf/Makefile
> deleted file mode 100644
> index 957f25bd16..0000000000
> --- a/BaseTools/Source/C/GenVtf/Makefile
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -## @file
> -# Windows makefile for 'GenVtf' module build.
> -#
> -# Copyright (c) 2007 - 2010, 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.
> -#
> -!INCLUDE ..\Makefiles\ms.common
> -
> -APPNAME = GenVtf
> -
> -LIBS = $(LIB_PATH)\Common.lib
> -
> -OBJECTS = GenVtf.obj
> -
> -!INCLUDE ..\Makefiles\ms.app
> -
> diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
> index 67454ad74b..06a877ee6b 100755
> --- a/BaseTools/toolsetup.bat
> +++ b/BaseTools/toolsetup.bat
> @@ -265,7 +265,6 @@ IF NOT EXIST "%EDK_TOOLS_BIN%\GenFv.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\GenFw.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\GenPage.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\GenSec.exe" goto check_c_tools
> -IF NOT EXIST "%EDK_TOOLS_BIN%\GenVtf.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\Split.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\TianoCompress.exe" goto check_c_tools
>  IF NOT EXIST "%EDK_TOOLS_BIN%\VfrCompile.exe" goto check_c_tools
> --
> 2.18.0.windows.1



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] BaseTools: Remove GenVtf
@ 2018-11-27  1:53 Shenglei Zhang
  0 siblings, 0 replies; 3+ messages in thread
From: Shenglei Zhang @ 2018-11-27  1:53 UTC (permalink / raw)
  To: edk2-devel; +Cc: Yonghong Zhu, Liming Gao

GenVtf C tool is IPF specific. IPF support has been removed
from edk2 trunk. This tool can be removed.
https://bugzilla.tianocore.org/show_bug.cgi?id=1349

v2:Remove GenVtf in Makefile and GNUmakefile.

Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
 BaseTools/Source/BinaryFiles.txt      |    1 -
 BaseTools/Source/C/GNUmakefile        |    1 -
 BaseTools/Source/C/GenVtf/GNUmakefile |   21 -
 BaseTools/Source/C/GenVtf/GenVtf.c    | 2811 -------------------------
 BaseTools/Source/C/GenVtf/GenVtf.h    |  326 ---
 BaseTools/Source/C/GenVtf/Makefile    |   22 -
 BaseTools/Source/C/Makefile           |    1 -
 BaseTools/toolsetup.bat               |    1 -
 8 files changed, 3184 deletions(-)
 delete mode 100644 BaseTools/Source/C/GenVtf/GNUmakefile
 delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.c
 delete mode 100644 BaseTools/Source/C/GenVtf/GenVtf.h
 delete mode 100644 BaseTools/Source/C/GenVtf/Makefile

diff --git a/BaseTools/Source/BinaryFiles.txt b/BaseTools/Source/BinaryFiles.txt
index aad138ebd5..d707df9dda 100644
--- a/BaseTools/Source/BinaryFiles.txt
+++ b/BaseTools/Source/BinaryFiles.txt
@@ -44,7 +44,6 @@ GenFw.exe
 GenPage.exe
 GenPatchPcdTable.exe
 GenSec.exe
-GenVtf.exe
 ImportTool.bat
 LzmaCompress.exe
 LzmaF86Compress.bat
diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile
index 37421ad9f0..c38de5ac73 100644
--- a/BaseTools/Source/C/GNUmakefile
+++ b/BaseTools/Source/C/GNUmakefile
@@ -63,7 +63,6 @@ APPLICATIONS = \
   GenPage \
   GenSec \
   GenCrc32 \
-  GenVtf \
   LzmaCompress \
   Split \
   TianoCompress \
diff --git a/BaseTools/Source/C/GenVtf/GNUmakefile b/BaseTools/Source/C/GenVtf/GNUmakefile
deleted file mode 100644
index 54160c64d4..0000000000
--- a/BaseTools/Source/C/GenVtf/GNUmakefile
+++ /dev/null
@@ -1,21 +0,0 @@
-## @file
-# GNU/Linux makefile for 'GenVtf' module build.
-#
-# Copyright (c) 2007 - 2018, 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.
-#
-MAKEROOT ?= ..
-
-APPNAME = GenVtf
-
-LIBS = -lCommon
-
-OBJECTS = GenVtf.o
-
-include $(MAKEROOT)/Makefiles/app.makefile
diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c
deleted file mode 100644
index 3a7ac06156..0000000000
--- a/BaseTools/Source/C/GenVtf/GenVtf.c
+++ /dev/null
@@ -1,2811 +0,0 @@
-/** @file
-This file contains functions required to generate a boot strap file (BSF) also
-known as the Volume Top File (VTF)
-
-Copyright (c) 1999 - 2018, 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.
-
-**/
-
-//
-//
-//
-#include <FvLib.h>
-#include <Common/UefiBaseTypes.h>
-#include "GenVtf.h"
-#include <Guid/PiFirmwareFileSystem.h>
-#include "CommonLib.h"
-#include "EfiUtilityMsgs.h"
-
-//
-// Global variables
-//
-UINTN SectionOptionFlag = 0;
-UINTN SectionCompFlag = 0;
-
-UINT64        DebugLevel;
-BOOLEAN       DebugMode;
-
-BOOLEAN     QuietMode = FALSE;
-
-BOOLEAN     VTF_OUTPUT = FALSE;
-CHAR8       *OutFileName1;
-CHAR8       *OutFileName2;
-CHAR8       *SymFileName;
-
-CHAR8           **TokenStr;
-CHAR8           **OrgStrTokPtr;
-
-PARSED_VTF_INFO *FileListPtr;
-PARSED_VTF_INFO *FileListHeadPtr;
-
-VOID            *Vtf1Buffer;
-VOID            *Vtf1EndBuffer;
-VOID            *Vtf2Buffer;
-VOID            *Vtf2EndBuffer;
-
-UINTN           ValidLineNum        = 0;
-UINTN           ValidFFDFileListNum = 0;
-
-//
-// Section Description and their number of occurences in *.INF file
-//
-UINTN           NumFvFiles        = 0;
-UINTN           SectionOptionNum  = 0;
-
-//
-// Global flag which will check for VTF Present, if yes then will be used
-// to decide about adding FFS header to pad data
-//
-BOOLEAN         VTFPresent = FALSE;
-BOOLEAN         SecondVTF = FALSE;
-
-//
-// Address related information
-//
-UINT64          Fv1BaseAddress        = 0;
-UINT64          Fv2BaseAddress        = 0;
-UINT64          Fv1EndAddress         = 0;
-UINT64          Fv2EndAddress         = 0;
-UINT32          Vtf1TotalSize         = SIZE_TO_OFFSET_PAL_A_END;
-UINT64          Vtf1LastStartAddress  = 0;
-UINT32          Vtf2TotalSize         = 0;
-UINT64          Vtf2LastStartAddress  = 0;
-
-UINT32          BufferToTop           = 0;
-
-//
-// IA32 Reset Vector Bin name
-//
-CHAR8           IA32BinFile[FILE_NAME_SIZE];
-
-//
-// Function Implementations
-//
-EFI_STATUS
-ConvertVersionInfo (
-  IN      CHAR8     *Str,
-  IN OUT  UINT8     *MajorVer,
-  IN OUT  UINT8     *MinorVer
-  )
-/*++
-Routine Description:
-
-  This function split version to major version and minor version
-
-Arguments:
-
-  Str      - String representing in form XX.XX
-  MajorVer - The major version
-  MinorVer - The minor version
-
-Returns:
-
-  EFI_SUCCESS  - The function completed successfully.
-
---*/
-{
-  CHAR8  TemStr[5] = "0000";
-  int    Major;
-  int    Minor;
-  UINTN Length;
-
-  Major = 0;
-  Minor = 0;
-
-  if (strstr (Str, ".") != NULL) {
-    sscanf (
-      Str,
-      "%02x.%02x",
-      &Major,
-      &Minor
-      );
-  } else {
-    Length = strlen(Str);
-    if (Length < 4) {
-      memcpy (TemStr + 4 - Length, Str, Length);
-    } else {
-      memcpy (TemStr, Str + Length - 4, 4);
-    }
-
-    sscanf (
-      TemStr,
-      "%02x%02x",
-      &Major,
-      &Minor
-      );
-  }
-
-  *MajorVer = (UINT8) Major;
-  *MinorVer = (UINT8) Minor;
-  return EFI_SUCCESS;
-}
-
-VOID
-TrimLine (
-  IN  CHAR8 *Line
-  )
-/*++
-Routine Description:
-
-  This function cleans up the line by removing all whitespace and
-  comments
-
-Arguments:
-
-  Line   - The pointer of the string
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 TmpLine[FILE_NAME_SIZE];
-  CHAR8 Char;
-  CHAR8 *Ptr0;
-  UINTN Index;
-  UINTN Index2;
-
-  //
-  // Change '#' to '//' for Comment style
-  //
-  if (((Ptr0 = strchr (Line, '#')) != NULL) || ((Ptr0 = strstr (Line, "//")) != NULL)) {
-    Line[Ptr0 - Line] = 0;
-  }
-
-  //
-  // Initialize counters
-  //
-  Index   = 0;
-  Index2  = 0;
-
-  while ((Char = Line[Index]) != 0) {
-    if ((Char != ' ') && (Char != '\t') && (Char != '\n') && (Char != '\r')) {
-      TmpLine[Index2++] = Char;
-    }
-    Index++;
-  }
-
-  TmpLine[Index2] = 0;
-  strcpy (Line, TmpLine);
-}
-
-VOID
-ValidLineCount (
-  IN  FILE *Fp
-  )
-/*++
-
-Routine Description:
-
-  This function calculated number of valid lines in a input file.
-
-Arguments:
-
-  Fp    - Pointer to a file handle which has been opened.
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 Buff[FILE_NAME_SIZE];
-  while (fgets(Buff, sizeof (Buff), Fp)) {
-    TrimLine (Buff);
-    if (Buff[0] == 0) {
-      continue;
-    }
-    ValidLineNum++;
-  }
-}
-
-EFI_STATUS
-ParseInputFile (
-  IN  FILE *Fp
-  )
-/*++
-
-Routine Description:
-
-  This function parses the input file and tokenize the string
-
-Arguments:
-
-  Fp    - Pointer to a file handle which has been opened.
-
-Returns:
-
-  None
-
---*/
-{
-  CHAR8 *Token;
-  CHAR8 Buff[FILE_NAME_SIZE + 1];
-  CHAR8 Delimit[] = "=";
-
-  Buff [FILE_NAME_SIZE] = '\0';
-  Token = NULL;
-
-  while (fgets (Buff, FILE_NAME_SIZE, Fp) != NULL) {
-    TrimLine (Buff);
-    if (Buff[0] == 0) {
-      continue;
-    }
-    Token = strtok (Buff, Delimit);
-    while (Token != NULL) {
-      strcpy (*TokenStr, Token);
-      TokenStr ++;
-      Token = strtok (NULL, Delimit);
-    }
-  }
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-InitializeComps (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function initializes the relevant global variable which is being
-  used to store the information retrieved from INF file.  This also initializes
-  the VTF symbol file.
-
-Arguments:
-
-  None
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_OUT_OF_RESOURCES   - Malloc failed.
-
---*/
-{
-
-  FileListPtr = malloc (sizeof (PARSED_VTF_INFO));
-
-  if (FileListPtr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  FileListHeadPtr = FileListPtr;
-  memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
-  FileListPtr->NextVtfInfo = NULL;
-
-  remove (SymFileName);
-  return EFI_SUCCESS;
-}
-
-VOID
-ParseAndUpdateComponents (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function initializes the relevant global variable which is being
-  used to store the information retrieved from INF file.
-
-Arguments:
-
-  VtfInfo  - A pointer to the VTF Info Structure
-
-
-Returns:
-
-  None
-
---*/
-{
-  UINT64  StringValue;
-
-  while (*TokenStr != NULL && (strnicmp (*TokenStr, "COMP_NAME", 9) != 0)) {
-
-    if (strnicmp (*TokenStr, "COMP_LOC", 8) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "F", 1) == 0) {
-        VtfInfo->LocationType = FIRST_VTF;
-      } else if (strnicmp (*TokenStr, "S", 1) == 0) {
-        VtfInfo->LocationType = SECOND_VTF;
-      } else {
-        VtfInfo->LocationType = NONE;
-      }
-    } else if (strnicmp (*TokenStr, "COMP_TYPE", 9) == 0) {
-      TokenStr++;
-      if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
-        Error (NULL, 0, 5001, "Cannot get: \"0x%s\".", *TokenStr);
-        return ;
-      }
-
-      VtfInfo->CompType = (UINT8) StringValue;
-    } else if (strnicmp (*TokenStr, "COMP_VER", 8) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "-", 1) == 0) {
-        VtfInfo->VersionPresent = FALSE;
-        VtfInfo->MajorVer       = 0;
-        VtfInfo->MinorVer       = 0;
-      } else {
-        VtfInfo->VersionPresent = TRUE;
-        ConvertVersionInfo (*TokenStr, &VtfInfo->MajorVer, &VtfInfo->MinorVer);
-      }
-    } else if (strnicmp (*TokenStr, "COMP_BIN", 8) == 0) {
-      TokenStr++;
-      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-        Error (NULL, 0, 3000, "Invalid", "The 'COMP_BIN' name is too long.");
-        return ;
-      }
-      strncpy (VtfInfo->CompBinName, *TokenStr, FILE_NAME_SIZE - 1);
-      VtfInfo->CompBinName[FILE_NAME_SIZE - 1] = 0;
-    } else if (strnicmp (*TokenStr, "COMP_SYM", 8) == 0) {
-      TokenStr++;
-      if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-        Error (NULL, 0, 3000, "Invalid", "The 'COMP_SYM' name is too long.");
-        return ;
-      }
-      strncpy (VtfInfo->CompSymName, *TokenStr, FILE_NAME_SIZE - 1);
-      VtfInfo->CompSymName[FILE_NAME_SIZE - 1] = 0;
-    } else if (strnicmp (*TokenStr, "COMP_SIZE", 9) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "-", 1) == 0) {
-        VtfInfo->PreferredSize  = FALSE;
-        VtfInfo->CompSize       = 0;
-      } else {
-        VtfInfo->PreferredSize = TRUE;
-        if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) {
-          Error (NULL, 0, 5001, "Parse error", "Cannot get: %s.", TokenStr);
-          return ;
-        }
-
-        VtfInfo->CompSize = (UINTN) StringValue;
-      }
-
-    } else if (strnicmp (*TokenStr, "COMP_CS", 7) == 0) {
-      TokenStr++;
-      if (strnicmp (*TokenStr, "1", 1) == 0) {
-        VtfInfo->CheckSumRequired = 1;
-      } else if (strnicmp (*TokenStr, "0", 1) == 0) {
-        VtfInfo->CheckSumRequired = 0;
-      } else {
-        Error (NULL, 0, 3000, "Invaild", "Bad value in INF file required field: Checksum, the value must be '0' or '1'.");
-      }
-    }
-
-    TokenStr++;
-    if (*TokenStr == NULL) {
-      break;
-    }
-  }
-}
-
-VOID
-InitializeInFileInfo (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function intializes the relevant global variable which is being
-  used to store the information retrieved from INF file.
-
-Arguments:
-
-  NONE
-
-Returns:
-
-  NONE
-
---*/
-{
-
-  SectionOptionFlag = 0;
-  SectionCompFlag   = 0;
-  TokenStr          = OrgStrTokPtr;
-
-  while (*TokenStr != NULL) {
-    if (strnicmp (*TokenStr, "[OPTIONS]", 9) == 0) {
-      SectionOptionFlag = 1;
-      SectionCompFlag   = 0;
-    }
-
-    if (strnicmp (*TokenStr, "[COMPONENTS]", 12) == 0) {
-      if (FileListPtr == NULL) {
-        FileListPtr = FileListHeadPtr;
-      }
-
-      SectionCompFlag   = 1;
-      SectionOptionFlag = 0;
-      TokenStr++;
-    }
-
-    if (SectionOptionFlag) {
-      if (stricmp (*TokenStr, "IA32_RST_BIN") == 0) {
-        TokenStr++;
-        if (strlen (*TokenStr) >= FILE_NAME_SIZE) {
-          Error (NULL, 0, 3000, "Invalid", "The 'IA32_RST_BIN' name is too long.");
-          break;
-        }
-        strncpy (IA32BinFile, *TokenStr, FILE_NAME_SIZE - 1);
-        IA32BinFile[FILE_NAME_SIZE - 1] = 0;
-      }
-    }
-
-    if (SectionCompFlag) {
-      if (stricmp (*TokenStr, "COMP_NAME") == 0) {
-        TokenStr++;
-        if (strlen (*TokenStr) >= COMPONENT_NAME_SIZE) {
-          Error (NULL, 0, 3000, "Invalid", "The 'COMP_NAME' name is too long.");
-          break;
-        }
-        strncpy (FileListPtr->CompName, *TokenStr, COMPONENT_NAME_SIZE - 1);
-        FileListPtr->CompName[COMPONENT_NAME_SIZE - 1] = 0;
-        TokenStr++;
-        ParseAndUpdateComponents (FileListPtr);
-      }
-
-      if (*TokenStr != NULL) {
-        FileListPtr->NextVtfInfo  = malloc (sizeof (PARSED_VTF_INFO));
-        if (FileListPtr->NextVtfInfo == NULL) {
-          Error (NULL, 0, 4003, "Resource", "Out of memory resources.", NULL);
-          break;
-        }
-        FileListPtr = FileListPtr->NextVtfInfo;
-        memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO));
-        FileListPtr->NextVtfInfo = NULL;
-        continue;
-      } else {
-        break;
-      }
-    }
-
-    TokenStr++;
-  }
-}
-
-EFI_STATUS
-GetVtfRelatedInfoFromInfFile (
-  IN FILE *FilePointer
-  )
-/*++
-
-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 VTF
-
-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 information
-  EFI_OUT_OF_RESOURCES  - Malloc Failed
-  EFI_SUCCESS           - The function completed successfully
-
---*/
-{
-  FILE        *Fp;
-  UINTN       Index;
-  UINTN       Index1;
-  EFI_STATUS  Status;
-
-  Status = EFI_SUCCESS;
-  Fp = FilePointer;
-  if (Fp == NULL) {
-    Error (NULL, 0, 2000, "Invalid parameter", "BSF INF file is invalid!");
-    return EFI_ABORTED;
-  }
-
-  ValidLineCount (Fp);
-
-  if (ValidLineNum == 0) {
-    Error (NULL, 0, 2000, "Invalid parameter", "File does not contain any valid information!");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  TokenStr = (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum + 1));
-
-  if (TokenStr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  memset (TokenStr, 0, (sizeof (UINTN) * (2 * ValidLineNum + 1)));
-  OrgStrTokPtr = TokenStr;
-
-  for (Index = 0; Index < (2 * ValidLineNum); Index++) {
-    *TokenStr = (CHAR8*)malloc (sizeof (CHAR8) * FILE_NAME_SIZE);
-
-    if (*TokenStr == NULL) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto ParseFileError;
-    }
-
-    memset (*TokenStr, 0, FILE_NAME_SIZE);
-    TokenStr++;
-  }
-
-  TokenStr  = OrgStrTokPtr;
-  fseek (Fp, 0L, SEEK_SET);
-
-  Status = InitializeComps ();
-
-  if (Status != EFI_SUCCESS) {
-    goto ParseFileError;
-  }
-
-  Status = ParseInputFile (Fp);
-  if (Status != EFI_SUCCESS) {
-    goto ParseFileError;
-  }
-
-  InitializeInFileInfo ();
-
-ParseFileError:
-
-  for (Index1 = 0; Index1 < Index; Index1 ++) {
-    free (OrgStrTokPtr[Index1]);
-  }
-
-  free (OrgStrTokPtr);
-
-  return Status;
-}
-
-VOID
-GetRelativeAddressInVtfBuffer (
-  IN      UINT64     Address,
-  IN OUT  UINTN      *RelativeAddress,
-  IN      LOC_TYPE   LocType
-  )
-/*++
-
-Routine Description:
-
-  This function checks for the address alignmnet for specified data boundary. In
-  case the address is not aligned, it returns FALSE and the amount of data in
-  terms of byte needed to adjust to get the boundary alignmnet. If data is
-  aligned, TRUE will be returned.
-
-Arguments:
-
-  Address             - The address of the flash map space
-  RelativeAddress     - The relative address of the Buffer
-  LocType             - The type of the VTF
-
-
-Returns:
-
-
---*/
-{
-  UINT64  TempAddress;
-  UINT8   *LocalBuff;
-
-  if (LocType == FIRST_VTF) {
-    LocalBuff         = (UINT8 *) Vtf1EndBuffer;
-    TempAddress       = Fv1EndAddress - Address;
-    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
-  } else {
-    LocalBuff         = (UINT8 *) Vtf2EndBuffer;
-    TempAddress       = Fv2EndAddress - Address;
-    *RelativeAddress  = (UINTN) LocalBuff - (UINTN) TempAddress;
-  }
-}
-
-EFI_STATUS
-GetComponentVersionInfo (
-  IN  OUT PARSED_VTF_INFO   *VtfInfo,
-  IN      UINT8             *Buffer
-  )
-/*++
-Routine Description:
-
-  This function will extract the version information from File
-
-Arguments:
-
-  VtfInfo  - A Pointer to the VTF Info Structure
-  Buffer   - A Pointer to type UINT8
-
-Returns:
-
-   EFI_SUCCESS           - The function completed successfully
-   EFI_INVALID_PARAMETER - The parameter is invalid
-
---*/
-{
-  UINT16      VersionInfo;
-  EFI_STATUS  Status;
-
-  switch (VtfInfo->CompType) {
-
-  case COMP_TYPE_FIT_PAL_A:
-  case COMP_TYPE_FIT_PAL_B:
-    memcpy (&VersionInfo, (Buffer + 8), sizeof (UINT16));
-    VtfInfo->MajorVer = (UINT8) ((VersionInfo & 0xFF00) >> 8);
-    VtfInfo->MinorVer = (UINT8) (VersionInfo & 0x00FF);
-    Status            = EFI_SUCCESS;
-    break;
-
-  default:
-    Status = EFI_INVALID_PARAMETER;
-    break;
-  }
-
-  return Status;
-}
-
-BOOLEAN
-CheckAddressAlignment (
-  IN      UINT64  Address,
-  IN      UINT64  AlignmentData,
-  IN OUT  UINT64  *AlignAdjustByte
-  )
-/*++
-
-Routine Description:
-
-  This function checks for the address alignmnet for specified data boundary. In
-  case the address is not aligned, it returns FALSE and the amount of data in
-  terms of byte needed to adjust to get the boundary alignmnet. If data is
-  aligned, TRUE will be returned.
-
-Arguments:
-
-  Address              - Pointer to buffer containing byte data of component.
-  AlignmentData        - DataSize for which address needed to be aligned
-  AlignAdjustByte      - Number of bytes needed to adjust alignment.
-
-Returns:
-
-  TRUE                 - Address is aligned to specific data size boundary
-  FALSE                - Address in not aligned to specified data size boundary
-                       - Add/Subtract AlignAdjustByte to aling the address.
-
---*/
-{
-  //
-  // Check if the assigned address is on address boundary. If not, it will
-  // return the remaining byte required to adjust the address for specified
-  // address boundary
-  //
-  *AlignAdjustByte = (Address % AlignmentData);
-
-  if (*AlignAdjustByte == 0) {
-    return TRUE;
-  } else {
-    return FALSE;
-  }
-}
-
-EFI_STATUS
-GetFitTableStartAddress (
-  IN OUT  FIT_TABLE   **FitTable
-  )
-/*++
-
-Routine Description:
-
-  Get the FIT table start address in VTF Buffer
-
-Arguments:
-
-  FitTable    - Pointer to available fit table where new component can be added
-
-Returns:
-
-  EFI_SUCCESS - The function completed successfully
-
---*/
-{
-  UINT64  FitTableAdd;
-  UINT64  FitTableAddOffset;
-  UINTN   RelativeAddress;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File. The relative address will be
-  // the address of fit table VTF buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  //
-  // The FitTableAdd is the extracted Itanium based address pointing to FIT
-  // table. The relative address will return its actual location in VTF
-  // Buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  *FitTable = (FIT_TABLE *) RelativeAddress;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-GetNextAvailableFitPtr (
-  IN  FIT_TABLE   **FitPtr
-  )
-/*++
-
-Routine Description:
-
-  Get the FIT table address and locate the free space in fit where we can add
-  new component. In this process, this function locates the fit table using
-  Fit pointer in Itanium-based address map (as per Intel?Itanium(TM) SAL spec)
-  and locate the available location in FIT table to be used by new components.
-  If there are any Fit table which areg not being used contains ComponentType
-  field as 0x7F. If needed we can change this and spec this out.
-
-Arguments:
-
-  FitPtr    - Pointer to available fit table where new component can be added
-
-Returns:
-
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  FIT_TABLE *TmpFitPtr;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddOffset;
-  UINTN     Index;
-  UINTN     NumFitComponents;
-  UINTN     RelativeAddress;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File. The relative address will be
-  // the address of fit table VTF buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  //
-  // The FitTableAdd is the extracted Itanium based address pointing to FIT
-  // table. The relative address will return its actual location in VTF
-  // Buffer.
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  TmpFitPtr         = (FIT_TABLE *) RelativeAddress;
-  NumFitComponents  = TmpFitPtr->CompSize;
-  *FitPtr           = NULL;
-
-  for (Index = 0; Index < NumFitComponents; Index++) {
-    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) == COMP_TYPE_FIT_UNUSED) {
-      *FitPtr = TmpFitPtr;
-      break;
-    }
-
-    TmpFitPtr++;
-  }
-
-  return EFI_SUCCESS;
-}
-
-int
-CompareItems (
-  IN const VOID  *Arg1,
-  IN const VOID  *Arg2
-  )
-/*++
-
-Routine Description:
-
-    This function is used by qsort to sort the FIT table based upon Component
-    Type in their incresing order.
-
-Arguments:
-
-    Arg1  -   Pointer to Arg1
-    Arg2  -   Pointer to Arg2
-
-Returns:
-
-    None
-
---*/
-{
-  if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) > (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
-    return 1;
-  } else if ((((FIT_TABLE *) Arg1)->CvAndType & FIT_TYPE_MASK) < (((FIT_TABLE *) Arg2)->CvAndType & FIT_TYPE_MASK)) {
-    return -1;
-  } else {
-    return 0;
-  }
-}
-
-VOID
-SortFitTable (
-  IN  VOID
-  )
-/*++
-
-Routine Description:
-
-    This function is used by qsort to sort the FIT table based upon Component
-    Type in their incresing order.
-
-Arguments:
-
-    VOID
-
-Returns:
-
-    None
-
---*/
-{
-  FIT_TABLE *FitTable;
-  FIT_TABLE *TmpFitPtr;
-  UINTN     NumFitComponents;
-  UINTN     Index;
-
-  GetFitTableStartAddress (&FitTable);
-  TmpFitPtr         = FitTable;
-  NumFitComponents  = 0;
-  for (Index = 0; Index < FitTable->CompSize; Index++) {
-    if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) != COMP_TYPE_FIT_UNUSED) {
-      NumFitComponents += 1;
-    }
-    TmpFitPtr++;
-  }
-  qsort ((VOID *) FitTable, NumFitComponents, sizeof (FIT_TABLE), CompareItems);
-}
-
-VOID
-UpdateFitEntryForFwVolume (
-  IN  UINT64  Size
-  )
-/*++
-
-Routine Description:
-
-  This function updates the information about Firmware Volume  in FIT TABLE.
-  This FIT table has to be immediately below the PAL_A Start and it contains
-  component type and address information. Other information can't be
-  created this time so we would need to fix it up..
-
-
-Arguments:
-
-  Size   - Firmware Volume Size
-
-Returns:
-
-  VOID
-
---*/
-{
-  FIT_TABLE *CompFitPtr;
-  UINTN     RelativeAddress;
-
-  //
-  // FV Fit table will be located at PAL_A Startaddress - 16 byte location
-  //
-  Vtf1LastStartAddress -= 0x10;
-  Vtf1TotalSize += 0x10;
-
-  GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-
-  CompFitPtr              = (FIT_TABLE *) RelativeAddress;
-  CompFitPtr->CompAddress = Fv1BaseAddress;
-
-  //
-  // Since we don't have any information about its location in Firmware Volume,
-  // initialize address to 0. This will be updated once Firmware Volume is
-  // being build and its current address will be fixed in FIT table. Currently
-  // we haven't implemented it so far and working on architectural clarafication
-  //
-  //
-  // Firmware Volume Size in 16 byte block
-  //
-  CompFitPtr->CompSize = ((UINT32) Size) / 16;
-
-  //
-  // Since Firmware Volume does not exist by the time we create this FIT info
-  // this should be fixedup from Firmware Volume creation tool. We haven't
-  // worked out a method so far.
-  //
-  CompFitPtr->CompVersion = MAKE_VERSION (0, 0);
-
-  //
-  // Since we don't have any info about this file, we are making sure that
-  // checksum is not needed.
-  //
-  CompFitPtr->CvAndType = CV_N_TYPE (0, COMP_TYPE_FIT_FV_BOOT);
-
-  //
-  // Since non VTF component will reside outside the VTF, we will not have its
-  // binary image while creating VTF, hence we will not perform checksum at
-  // this time. Once Firmware Volume is being created which will contain this
-  // VTF, it will fix the FIT table for all the non VTF component and hence
-  // checksum
-  //
-  CompFitPtr->CheckSum = 0;
-}
-
-EFI_STATUS
-UpdateFitEntryForNonVTFComp (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function updates the information about non VTF component in FIT TABLE.
-  Since non VTF componets binaries are not part of VTF binary, we would still
-  be required to update its location information in Firmware Volume, inside
-  FIT table.
-
-Arguments:
-
-  VtfInfo    - Pointer to VTF Info Structure
-
-Returns:
-
-  EFI_ABORTED  - The function fails to update the component in FIT
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  FIT_TABLE *CompFitPtr;
-
-  //
-  // Scan the FIT table for available space
-  //
-  GetNextAvailableFitPtr (&CompFitPtr);
-  if (CompFitPtr == NULL) {
-    Error (NULL, 0, 5003, "Invalid", "Can't update this component in FIT");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Since we don't have any information about its location in Firmware Volume,
-  // initialize address to 0. This will be updated once Firmware Volume is
-  // being build and its current address will be fixed in FIT table
-  //
-  CompFitPtr->CompAddress = 0;
-  CompFitPtr->CompSize    = VtfInfo->CompSize;
-  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-
-  //
-  // Since non VTF component will reside outside the VTF, we will not have its
-  // binary image while creating VTF, hence we will not perform checksum at
-  // this time. Once Firmware Volume is being created which will contain this
-  // VTF, it will fix the FIT table for all the non VTF component and hence
-  // checksum
-  //
-  CompFitPtr->CheckSum = 0;
-
-  //
-  // Fit Type is FV_BOOT which means Firmware Volume, we initialize this to base
-  // address of Firmware Volume in which this VTF will be attached.
-  //
-  if ((CompFitPtr->CvAndType & 0x7F) == COMP_TYPE_FIT_FV_BOOT) {
-    CompFitPtr->CompAddress = Fv1BaseAddress;
-  }
-
-  return EFI_SUCCESS;
-}
-
-//
-// !!!WARNING
-// This function is updating the SALE_ENTRY in Itanium address space as per SAL
-// spec. SALE_ENTRY is being read from SYM file of PEICORE. Once the PEI
-// CORE moves in Firmware Volume, we would need to modify this function to be
-// used with a API which will detect PEICORE component while building Firmware
-// Volume and update its entry in FIT table as well as in Itanium address space
-// as per Intel?Itanium(TM) SAL address space
-//
-EFI_STATUS
-UpdateEntryPoint (
-  IN  PARSED_VTF_INFO   *VtfInfo,
-  IN  UINT64            *CompStartAddress
-  )
-/*++
-
-Routine Description:
-
-  This function updated the architectural entry point in IPF, SALE_ENTRY.
-
-Arguments:
-
-  VtfInfo            - Pointer to VTF Info Structure
-  CompStartAddress   - Pointer to Component Start Address
-
-Returns:
-
-  EFI_INVALID_PARAMETER  - The parameter is invalid
-  EFI_SUCCESS            - The function completed successfully
-
---*/
-{
-  UINTN   RelativeAddress;
-  UINT64  SalEntryAdd;
-  FILE    *Fp;
-  UINTN   Offset;
-
-  CHAR8   Buff[FILE_NAME_SIZE];
-  CHAR8   Buff1[10];
-  CHAR8   Buff2[10];
-  CHAR8   OffsetStr[30];
-  CHAR8   Buff3[10];
-  CHAR8   Buff4[10];
-  CHAR8   Buff5[10];
-  CHAR8   Token[50];
-  CHAR8   FormatString[MAX_LINE_LEN];
-
-  Fp = fopen (LongFilePath (VtfInfo->CompSymName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompSymName);
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Generate the format string for fscanf
-  //
-  sprintf (
-    FormatString,
-    "%%%us %%%us %%%us %%%us %%%us %%%us %%%us",
-    (unsigned) sizeof (Buff1) - 1,
-    (unsigned) sizeof (Buff2) - 1,
-    (unsigned) sizeof (OffsetStr) - 1,
-    (unsigned) sizeof (Buff3) - 1,
-    (unsigned) sizeof (Buff4) - 1,
-    (unsigned) sizeof (Buff5) - 1,
-    (unsigned) sizeof (Token) - 1
-    );
-
-  while (fgets (Buff, sizeof (Buff), Fp) != NULL) {
-    fscanf (
-      Fp,
-      FormatString,
-      Buff1,
-      Buff2,
-      OffsetStr,
-      Buff3,
-      Buff4,
-      Buff5,
-      Token
-      );
-    if (strnicmp (Token, "SALE_ENTRY", 10) == 0) {
-      break;
-    }
-  }
-
-  Offset = strtoul (OffsetStr, NULL, 16);
-
-  *CompStartAddress += Offset;
-  SalEntryAdd = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT);
-
-  GetRelativeAddressInVtfBuffer (SalEntryAdd, &RelativeAddress, FIRST_VTF);
-
-  memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof (UINT64));
-
-  if (Fp != NULL) {
-    fclose (Fp);
-  }
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-CreateAndUpdateComponent (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function reads the binary file for each components and update them
-  in VTF Buffer as well as in FIT table. If the component is located in non
-  VTF area, only the FIT table address will be updated
-
-Arguments:
-
-  VtfInfo    - 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.
-                      (c) Fail to get the FIT table address.
-
-  EFI_INVALID_PARAMETER     Value returned from call to UpdateEntryPoint()
-  EFI_OUT_OF_RESOURCES      Memory allocation failure.
-
---*/
-{
-  EFI_STATUS  Status;
-  UINT64      CompStartAddress;
-  UINT64      FileSize;
-  UINT64      NumAdjustByte;
-  UINT8       *Buffer;
-  FILE        *Fp;
-  FIT_TABLE   *CompFitPtr;
-  BOOLEAN     Aligncheck;
-
-  if (VtfInfo->LocationType == NONE) {
-    UpdateFitEntryForNonVTFComp (VtfInfo);
-    return EFI_SUCCESS;
-  }
-
-  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
-
-    //
-    // BUGBUG: Satish to correct
-    //
-    FileSize -= SIZE_OF_PAL_HEADER;
-  }
-
-  if (VtfInfo->PreferredSize) {
-    if (FileSize > VtfInfo->CompSize) {
-      fclose (Fp);
-      Error (NULL, 0, 2000, "Invalid parameter", "The component size is more than specified size.");
-      return EFI_ABORTED;
-    }
-
-    FileSize = VtfInfo->CompSize;
-  }
-
-  Buffer = malloc ((UINTN) FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Buffer, 0, (UINTN) FileSize);
-
-  if ((VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) || (VtfInfo->CompType == COMP_TYPE_FIT_PAL_A_SPECIFIC)) {
-
-    //
-    // Read first 64 bytes of PAL header and use it to find version info
-    //
-    fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
-
-    //
-    // PAL header contains the version info. Currently, we will use the header
-    // to read version info and then discard.
-    //
-    if (!VtfInfo->VersionPresent) {
-      GetComponentVersionInfo (VtfInfo, Buffer);
-    }
-  }
-
-  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
-  fclose (Fp);
-
-  //
-  // If it is non PAL_B component, pass the entire buffer to get the version
-  // info and implement any specific case inside GetComponentVersionInfo.
-  //
-  if (VtfInfo->CompType != COMP_TYPE_FIT_PAL_B) {
-    if (!VtfInfo->VersionPresent) {
-      GetComponentVersionInfo (VtfInfo, Buffer);
-    }
-  }
-
-  if (VtfInfo->LocationType == SECOND_VTF) {
-
-    CompStartAddress = (Vtf2LastStartAddress - FileSize);
-  } else {
-    CompStartAddress = (Vtf1LastStartAddress - FileSize);
-  }
-
-  if (VtfInfo->CompType == COMP_TYPE_FIT_PAL_B) {
-    Aligncheck = CheckAddressAlignment (CompStartAddress, 32 * 1024, &NumAdjustByte);
-  } else {
-    Aligncheck = CheckAddressAlignment (CompStartAddress, 8, &NumAdjustByte);
-  }
-
-  if (!Aligncheck) {
-    CompStartAddress -= NumAdjustByte;
-  }
-
-  if (VtfInfo->LocationType == SECOND_VTF && SecondVTF == TRUE) {
-    Vtf2LastStartAddress = CompStartAddress;
-    Vtf2TotalSize += (UINT32) (FileSize + NumAdjustByte);
-    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, SECOND_VTF);
-  } else if (VtfInfo->LocationType == FIRST_VTF) {
-    Vtf1LastStartAddress = CompStartAddress;
-    Vtf1TotalSize += (UINT32) (FileSize + NumAdjustByte);
-    Status = UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, FIRST_VTF);
-  } else {
-    free (Buffer);
-    Error (NULL, 0, 2000,"Invalid Parameter", "There's component in second VTF so second BaseAddress and Size must be specified!");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (EFI_ERROR (Status)) {
-    free (Buffer);
-    return EFI_ABORTED;
-  }
-
-  GetNextAvailableFitPtr (&CompFitPtr);
-  if (CompFitPtr == NULL) {
-    free (Buffer);
-    return EFI_ABORTED;
-  }
-
-  CompFitPtr->CompAddress = CompStartAddress | IPF_CACHE_BIT;
-  if ((FileSize % 16) != 0) {
-    free (Buffer);
-    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
-    return EFI_INVALID_PARAMETER;
-  }
-  //assert ((FileSize % 16) == 0);
-  CompFitPtr->CompSize    = (UINT32) (FileSize / 16);
-  CompFitPtr->CompVersion = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  CompFitPtr->CvAndType   = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-  if (VtfInfo->CheckSumRequired) {
-    CompFitPtr->CheckSum  = 0;
-    CompFitPtr->CheckSum  = CalculateChecksum8 (Buffer, (UINTN) FileSize);
-  }
-
-  //
-  // Free the buffer
-  //
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  //
-  // Update the SYM file for this component based on it's start address.
-  //
-  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
-  if (EFI_ERROR (Status)) {
-
-    //
-    // At this time, SYM files are not required, so continue on error.
-    //
-  }
-
-  // !!!!!!!!!!!!!!!!!!!!!
-  // BUGBUG:
-  // This part of the code is a temporary line since PEICORE is going to be inside
-  // VTF till we work out how to determine the SALE_ENTRY through it. We will need
-  // to clarify so many related questions
-  // !!!!!!!!!!!!!!!!!!!!!!!
-
-  if (VtfInfo->CompType == COMP_TYPE_FIT_PEICORE) {
-    Status = UpdateEntryPoint (VtfInfo, &CompStartAddress);
-  }
-
-  return Status;
-}
-
-EFI_STATUS
-CreateAndUpdatePAL_A (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function reads the binary file for each components and update them
-  in VTF Buffer as well as FIT table
-
-Arguments:
-
-  VtfInfo    - 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_OUT_OF_RESOURCES  - Memory allocation failed.
-
---*/
-{
-  EFI_STATUS  Status;
-  UINT64      PalStartAddress;
-  UINT64      AbsAddress;
-  UINTN       RelativeAddress;
-  UINT64      FileSize;
-  UINT8       *Buffer;
-  FILE        *Fp;
-  FIT_TABLE   *PalFitPtr;
-
-  Fp = fopen (LongFilePath (VtfInfo->CompBinName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-  if (FileSize < 64) {
-    fclose (Fp);
-    Error (NULL, 0, 2000, "Invalid parameter", "PAL_A bin header is 64 bytes, so the Bin size must be larger than 64 bytes!");
-    return EFI_INVALID_PARAMETER;
-  }
-  FileSize -= SIZE_OF_PAL_HEADER;
-
-
-  if (VtfInfo->PreferredSize) {
-    if (FileSize > VtfInfo->CompSize) {
-      fclose (Fp);
-      Error (NULL, 0, 2000, "Invalid parameter", "The PAL_A Size is more than the specified size.");
-      return EFI_ABORTED;
-    }
-
-    FileSize = VtfInfo->CompSize;
-  }
-
-  Buffer = malloc ((UINTN) FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Buffer, 0, (UINTN) FileSize);
-
-  //
-  // Read, Get version Info and discard the PAL header.
-  //
-  fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp);
-
-  //
-  // Extract the version info from header of PAL_A. Once done, discrad this buffer
-  //
-  if (!VtfInfo->VersionPresent) {
-    GetComponentVersionInfo (VtfInfo, Buffer);
-  }
-
-  //
-  // Read PAL_A file in a buffer
-  //
-  fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp);
-  fclose (Fp);
-
-  PalStartAddress       = Fv1EndAddress - (SIZE_TO_OFFSET_PAL_A_END + FileSize);
-  Vtf1LastStartAddress  = PalStartAddress;
-  Vtf1TotalSize += (UINT32) FileSize;
-  Status      = UpdateVtfBuffer (PalStartAddress, Buffer, FileSize, FIRST_VTF);
-
-  AbsAddress  = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
-  GetRelativeAddressInVtfBuffer (AbsAddress, &RelativeAddress, FIRST_VTF);
-  PalFitPtr               = (FIT_TABLE *) RelativeAddress;
-  PalFitPtr->CompAddress  = PalStartAddress | IPF_CACHE_BIT;
-  //assert ((FileSize % 16) == 0);
-  if ((FileSize % 16) != 0) {
-    free (Buffer);
-    Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a multiple of 16.");
-    return EFI_INVALID_PARAMETER;
-  }
-
-  PalFitPtr->CompSize     = (UINT32) (FileSize / 16);
-  PalFitPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-  PalFitPtr->CvAndType    = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-  if (VtfInfo->CheckSumRequired) {
-    PalFitPtr->CheckSum = 0;
-    PalFitPtr->CheckSum = CalculateChecksum8 (Buffer, (UINTN) FileSize);
-  }
-
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  //
-  // Update the SYM file for this component based on it's start address.
-  //
-  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);
-  if (EFI_ERROR (Status)) {
-
-    //
-    // At this time, SYM files are not required, so continue on error.
-    //
-  }
-
-  return Status;
-}
-
-EFI_STATUS
-CreateFitTableAndInitialize (
-  IN  PARSED_VTF_INFO   *VtfInfo
-  )
-/*++
-
-Routine Description:
-
-  This function creates and intializes FIT table which would be used to
-  add component info inside this
-
-Arguments:
-
-  VtfInfo    - Pointer to Parsed Info
-
-Returns:
-
-  EFI_ABORTED  - Aborted due to no size information
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  UINT64    PalFitTableAdd;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddressOffset;
-  FIT_TABLE *PalFitPtr;
-  FIT_TABLE *FitStartPtr;
-  UINTN     NumFitComp;
-  UINTN     RelativeAddress;
-  UINTN     Index;
-
-  if (!VtfInfo->PreferredSize) {
-    Error (NULL, 0, 2000, "Invalid parameter", "FIT could not be allocated because there is no size information.");
-    return EFI_ABORTED;
-  }
-
-  if ((VtfInfo->CompSize % 16) != 0) {
-    Error (NULL, 0, 2000, "Invalid parameter", "Invalid FIT Table Size, it is not a multiple of 16 bytes. Please correct the size.");
-  }
-
-  PalFitTableAdd = Fv1EndAddress - SIZE_TO_PAL_A_FIT;
-  GetRelativeAddressInVtfBuffer (PalFitTableAdd, &RelativeAddress, FIRST_VTF);
-  PalFitPtr             = (FIT_TABLE *) RelativeAddress;
-  PalFitTableAdd        = (PalFitPtr->CompAddress - VtfInfo->CompSize);
-
-  FitTableAdd           = (PalFitPtr->CompAddress - 0x10) - VtfInfo->CompSize;
-  FitTableAddressOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-  GetRelativeAddressInVtfBuffer (FitTableAddressOffset, &RelativeAddress, FIRST_VTF);
-  *(UINT64 *) RelativeAddress = FitTableAdd;
-
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  //
-  // Update Fit Table with FIT Signature and FIT info in first 16 bytes.
-  //
-  FitStartPtr = (FIT_TABLE *) RelativeAddress;
-
-  strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8);  // "_FIT_   "
-  assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) == 0);
-  FitStartPtr->CompSize     = (VtfInfo->CompSize & 0x00FFFFFF) / 16;
-  FitStartPtr->CompVersion  = MAKE_VERSION (VtfInfo->MajorVer, VtfInfo->MinorVer);
-
-  //
-  // BUGBUG: If a checksum is required, add code to checksum the FIT table.  Also
-  // determine what to do for things like the FV component that aren't easily checksummed.
-  // The checksum will be done once we are done with all the componet update in the FIT
-  // table
-  //
-  FitStartPtr->CvAndType  = CV_N_TYPE (VtfInfo->CheckSumRequired, VtfInfo->CompType);
-
-  NumFitComp              = FitStartPtr->CompSize;
-
-  FitStartPtr++;
-
-  //
-  // Intialize remaining FIT table space to UNUSED fit component type
-  // so that when we need to create a FIT entry for a component, we can
-  // locate a free one and use it.
-  //
-  for (Index = 0; Index < (NumFitComp - 1); Index++) {
-    FitStartPtr->CvAndType = 0x7F;  // Initialize all with UNUSED
-    FitStartPtr++;
-  }
-
-  Vtf1TotalSize += VtfInfo->CompSize;
-  Vtf1LastStartAddress -= VtfInfo->CompSize;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-WriteVtfBinary (
-  IN CHAR8     *FileName,
-  IN UINT32    VtfSize,
-  IN LOC_TYPE  LocType
-  )
-/*++
-
-Routine Description:
-
-  Write Firmware Volume from memory to a file.
-
-Arguments:
-
-  FileName     - Output File Name which needed to be created/
-  VtfSize      - FileSize
-  LocType      - The type of the VTF
-
-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
-
---*/
-{
-  FILE  *Fp;
-  UINTN NumByte;
-  VOID  *VtfBuffer;
-  UINTN RelativeAddress;
-
-  if (LocType == FIRST_VTF) {
-    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-    VtfBuffer = (VOID *) RelativeAddress;
-  } else {
-    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
-    VtfBuffer = (VOID *) RelativeAddress;
-  }
-
-  Fp = fopen (LongFilePath (FileName), "wb");
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", FileName);
-    return EFI_ABORTED;
-  }
-
-  NumByte = fwrite (VtfBuffer, sizeof (UINT8), (UINTN) VtfSize, Fp);
-
-  if (Fp) {
-    fclose (Fp);
-  }
-
-  if (NumByte != (sizeof (UINT8) * VtfSize)) {
-    Error (NULL, 0, 0002, "Error writing file", FileName);
-    return EFI_ABORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
-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: First or Second
-
-Returns:
-
-  EFI_ABORTED  - The input parameter is error
-  EFI_SUCCESS  - The function completed successfully
-
---*/
-{
-  UINT8 *LocalBufferPtrToWrite;
-
-  if (LocType == FIRST_VTF) {
-    if ((StartAddress | IPF_CACHE_BIT) < (Vtf1LastStartAddress | IPF_CACHE_BIT)) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Start Address is less than the VTF start address.");
-      return EFI_ABORTED;
-    }
-
-    LocalBufferPtrToWrite = (UINT8 *) Vtf1EndBuffer;
-
-    LocalBufferPtrToWrite -= (Fv1EndAddress - StartAddress);
-
-  } else {
-
-    if ((StartAddress | IPF_CACHE_BIT) < (Vtf2LastStartAddress | IPF_CACHE_BIT)) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Error StartAddress");
-      return EFI_ABORTED;
-    }
-    LocalBufferPtrToWrite = (UINT8 *) Vtf2EndBuffer;
-    LocalBufferPtrToWrite -= (Fv2EndAddress - StartAddress);
-  }
-
-  memcpy (LocalBufferPtrToWrite, Buffer, (UINTN) DataSize);
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-UpdateFfsHeader (
-  IN UINT32         TotalVtfSize,
-  IN LOC_TYPE       LocType
-  )
-/*++
-
-Routine Description:
-
-  Update the Firmware Volume Buffer with requested buffer data
-
-Arguments:
-
-  TotalVtfSize     - Size of the VTF
-  Fileoffset       - The start of the file relative to the start of the FV.
-  LocType          - The type of the VTF
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_INVALID_PARAMETER  - The Ffs File Header Pointer is NULL
-
---*/
-{
-  EFI_FFS_FILE_HEADER *FileHeader;
-  UINTN               RelativeAddress;
-  EFI_GUID            EfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;
-
-  //
-  // Find the VTF file header location
-  //
-  if (LocType == FIRST_VTF) {
-    GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, FIRST_VTF);
-    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
-  } else {
-    GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress, SECOND_VTF);
-    FileHeader = (EFI_FFS_FILE_HEADER *) RelativeAddress;
-  }
-
-  if (FileHeader == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // write header
-  //
-  memset (FileHeader, 0, sizeof (EFI_FFS_FILE_HEADER));
-  memcpy (&FileHeader->Name, &EfiFirmwareVolumeTopFileGuid, sizeof (EFI_GUID));
-  FileHeader->Type        = EFI_FV_FILETYPE_RAW;
-  FileHeader->Attributes  = FFS_ATTRIB_CHECKSUM;
-
-  //
-  // Now FileSize includes the EFI_FFS_FILE_HEADER
-  //
-  FileHeader->Size[0] = (UINT8) (TotalVtfSize & 0x000000FF);
-  FileHeader->Size[1] = (UINT8) ((TotalVtfSize & 0x0000FF00) >> 8);
-  FileHeader->Size[2] = (UINT8) ((TotalVtfSize & 0x00FF0000) >> 16);
-
-  //
-  // Fill in checksums and state, all three must be zero for the checksums.
-  //
-  FileHeader->IntegrityCheck.Checksum.Header  = 0;
-  FileHeader->IntegrityCheck.Checksum.File    = 0;
-  FileHeader->State                           = 0;
-  FileHeader->IntegrityCheck.Checksum.Header  = CalculateChecksum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));
-  FileHeader->IntegrityCheck.Checksum.File    = CalculateChecksum8 ((UINT8 *) (FileHeader + 1), TotalVtfSize - sizeof (EFI_FFS_FILE_HEADER));
-  FileHeader->State                           = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID | EFI_FILE_DATA_VALID;
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-ValidateAddressAndSize (
-  IN  UINT64  BaseAddress,
-  IN  UINT64  FwVolSize
-  )
-/*++
-
-Routine Description:
-
-  Update the Firmware Volume Buffer with requested buffer data
-
-Arguments:
-
-  BaseAddress    - Base address for the Fw Volume.
-
-  FwVolSize      - Total Size of the FwVolume to which VTF will be attached..
-
-Returns:
-
-  EFI_SUCCESS     - The function completed successfully
-  EFI_UNSUPPORTED - The input parameter is error
-
---*/
-{
-  if ((FwVolSize > 0x40) && ((BaseAddress + FwVolSize) % 8 == 0)) {
-    return EFI_SUCCESS;
-  }
-
-  return EFI_UNSUPPORTED;
-}
-
-EFI_STATUS
-UpdateIA32ResetVector (
-  IN  CHAR8   *FileName,
-  IN  UINT64  FirstFwVSize
-  )
-/*++
-
-Routine Description:
-
-  Update the 16 byte IA32 Reset vector to maintain the compatibility
-
-Arguments:
-
-  FileName     - Binary file name which contains the IA32 Reset vector info..
-  FirstFwVSize - Total Size of the FwVolume to which VTF will be attached..
-
-Returns:
-
-  EFI_SUCCESS            - The function completed successfully
-  EFI_ABORTED            - Invalid File Size
-  EFI_INVALID_PARAMETER  - Bad File Name
-  EFI_OUT_OF_RESOURCES   - Memory allocation failed.
-
---*/
-{
-  UINT8 *Buffer;
-  UINT8 *LocalVtfBuffer;
-  UINTN FileSize;
-  FILE  *Fp;
-
-  if (!strcmp (FileName, "")) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Fp = fopen (LongFilePath (FileName), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", FileName);
-    return EFI_ABORTED;
-  }
-
-  FileSize = _filelength (fileno (Fp));
-
-  if (FileSize > 16) {
-    fclose (Fp);
-    return EFI_ABORTED;
-  }
-
-  Buffer = malloc (FileSize);
-  if (Buffer == NULL) {
-    fclose (Fp);
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  fread (Buffer, sizeof (UINT8), FileSize, Fp);
-
-  LocalVtfBuffer  = (UINT8 *) Vtf1EndBuffer - SIZE_IA32_RESET_VECT;
-  memcpy (LocalVtfBuffer, Buffer, FileSize);
-
-  if (Buffer) {
-    free (Buffer);
-  }
-
-  if (Fp != NULL) {
-    fclose (Fp);
-  }
-  return EFI_SUCCESS;
-}
-
-VOID
-CleanUpMemory (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  This function cleans up any allocated buffer
-
-Arguments:
-
-  NONE
-
-Returns:
-
-  NONE
-
---*/
-{
-  PARSED_VTF_INFO *TempFileListPtr;
-
-  if (Vtf1Buffer) {
-    free (Vtf1Buffer);
-  }
-
-  if (Vtf2Buffer) {
-    free (Vtf2Buffer);
-  }
-
-  //
-  // Cleanup the buffer which was allocated to read the file names from FV.INF
-  //
-  FileListPtr = FileListHeadPtr;
-  while (FileListPtr != NULL) {
-    TempFileListPtr = FileListPtr->NextVtfInfo;
-    free (FileListPtr);
-    FileListPtr = TempFileListPtr;
-  }
-}
-
-EFI_STATUS
-ProcessAndCreateVtf (
-  IN  UINT64  Size
-  )
-/*++
-
-Routine Description:
-
-  This function process the link list created during INF file parsing
-  and create component in VTF and updates its info in FIT table
-
-Arguments:
-
-  Size   - Size of the Firmware Volume of which, this VTF belongs to.
-
-Returns:
-
-  EFI_UNSUPPORTED - Unknown FIT type
-  EFI_SUCCESS     - The function completed successfully
-
---*/
-{
-  EFI_STATUS      Status;
-  PARSED_VTF_INFO *ParsedInfoPtr;
-
-  Status        = EFI_SUCCESS;
-
-  ParsedInfoPtr = FileListHeadPtr;
-
-  while (ParsedInfoPtr != NULL) {
-
-    switch (ParsedInfoPtr->CompType) {
-    //
-    // COMP_TYPE_FIT_HEADER is a special case, hence handle it here
-    //
-    case COMP_TYPE_FIT_HEADER:
-      //COMP_TYPE_FIT_HEADER          0x00
-      Status = CreateFitTableAndInitialize (ParsedInfoPtr);
-      break;
-
-    //
-    // COMP_TYPE_FIT_PAL_A is a special case, hence handle it here
-    //
-    case COMP_TYPE_FIT_PAL_A:
-      //COMP_TYPE_FIT_PAL_A           0x0F
-      Status = CreateAndUpdatePAL_A (ParsedInfoPtr);
-
-      //
-      // Based on VTF specification, once the PAL_A component has been written,
-      // update the Firmware Volume info as FIT table. This will be utilized
-      // to extract the Firmware Volume Start address where this VTF will be
-      // of part.
-      //
-      if (Status == EFI_SUCCESS) {
-        UpdateFitEntryForFwVolume (Size);
-      }
-      break;
-
-    case COMP_TYPE_FIT_FV_BOOT:
-      //COMP_TYPE_FIT_FV_BOOT         0x7E
-      //
-      // Since FIT entry for Firmware Volume has been created and it is
-      // located at (PAL_A start - 16 byte). So we will not process any
-      // Firmware Volume related entry from INF file
-      //
-      Status = EFI_SUCCESS;
-      break;
-
-    default:
-      //
-      // Any other component type should be handled here. This will create the
-      // image in specified VTF and create appropriate entry about this
-      // component in FIT Entry.
-      //
-      Status = CreateAndUpdateComponent (ParsedInfoPtr);
-      if (EFI_ERROR (Status)) {
-        Error (NULL, 0, 0002, "Error updating component", ParsedInfoPtr->CompName);
-        return EFI_ABORTED;
-      } else {
-      break;}
-    }
-
-    ParsedInfoPtr = ParsedInfoPtr->NextVtfInfo;
-  }
-  return Status;
-}
-
-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
-  fp             - The pointer to BSF inf file
-
-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  Status;
-  FILE            *VtfFP;
-
-  Status          = EFI_UNSUPPORTED;
-  VtfFP = fp;
-
-  if (StartAddress2 == 0) {
-    SecondVTF = FALSE;
-  } else {
-    SecondVTF = TRUE;
-  }
-
-  Fv1BaseAddress        = StartAddress1;
-  Fv1EndAddress         = Fv1BaseAddress + Size1;
-  if (Fv1EndAddress != 0x100000000ULL || Size1 < 0x100000) {
-    Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
-    if (Size1 < 0x100000) {
-      Error (NULL, 0, 2000, "Invalid parameter", "The FwVolumeSize must be larger than 1M!");
-    } else if (SecondVTF != TRUE) {
-      Error (NULL, 0, 2000, "Invalid parameter", "BaseAddress + FwVolumeSize must equal 0x100000000!");
-    }
-    Usage();
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // The image buffer for the First VTF
-  //
-  Vtf1Buffer = malloc ((UINTN) Size1);
-  if (Vtf1Buffer == NULL) {
-    Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
-    return EFI_OUT_OF_RESOURCES;
-  }
-  memset (Vtf1Buffer, 0x00, (UINTN) Size1);
-  Vtf1EndBuffer         = (UINT8 *) Vtf1Buffer + Size1;
-  Vtf1LastStartAddress  = Fv1EndAddress | IPF_CACHE_BIT;
-
-  if (SecondVTF) {
-    Fv2BaseAddress        = StartAddress2;
-    Fv2EndAddress         = Fv2BaseAddress + Size2;
-    if (Fv2EndAddress != StartAddress1) {
-      Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Size parameters!");
-      if (SecondVTF == TRUE) {
-        Error (NULL, 0, 2000, "Invalid parameter", "FirstBaseAddress + FirstFwVolumeSize must equal 0x100000000!");
-        Error (NULL, 0, 2000, "Invalid parameter", "SecondBaseAddress + SecondFwVolumeSize must equal FirstBaseAddress!");
-      }
-      Usage();
-      return EFI_INVALID_PARAMETER;
-    }
-
-    //
-    // The image buffer for the second VTF
-    //
-    Vtf2Buffer = malloc ((UINTN) Size2);
-    if (Vtf2Buffer == NULL) {
-      Error (NULL, 0, 4001, "Resource", "Not enough resources available to create memory mapped file for the Boot Strap File!");
-      return EFI_OUT_OF_RESOURCES;
-    }
-    memset (Vtf2Buffer, 0x00, (UINTN) Size2);
-    Vtf2EndBuffer         = (UINT8 *) Vtf2Buffer + Size2;
-    Vtf2LastStartAddress  = Fv2EndAddress | IPF_CACHE_BIT;
-  }
-
-  Status = GetVtfRelatedInfoFromInfFile (VtfFP);
-
-  if (Status != EFI_SUCCESS) {
-    Error (NULL, 0, 0003, "Error parsing file", "the input file.");
-    CleanUpMemory ();
-    return Status;
-  }
-
-  Status = ProcessAndCreateVtf (Size1);
-  if (Status != EFI_SUCCESS) {
-    CleanUpMemory ();
-    return Status;
-  }
-
-  if (SectionOptionFlag) {
-    Status = UpdateIA32ResetVector (IA32BinFile, Vtf1TotalSize);
-    if (Status != EFI_SUCCESS) {
-      CleanUpMemory ();
-      return Status;
-    }
-  }
-
-  //
-  // Re arrange the FIT Table for Ascending order of their FIT Type..
-  //
-  SortFitTable ();
-
-  //
-  // All components have been updated in FIT table. Now perform the FIT table
-  // checksum. The following function will check if Checksum is required,
-  // if yes, then it will perform the checksum otherwise not.
-  //
-  CalculateFitTableChecksum ();
-
-  //
-  // Write the FFS header
-  //
-  Vtf1TotalSize += sizeof (EFI_FFS_FILE_HEADER);
-  Vtf1LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
-
-  Status = UpdateFfsHeader (Vtf1TotalSize, FIRST_VTF);
-  if (Status != EFI_SUCCESS) {
-    CleanUpMemory ();
-    return Status;
-  }
-  //
-  // Update the VTF buffer into specified VTF binary file
-  //
-  Status  = WriteVtfBinary (OutFileName1, Vtf1TotalSize, FIRST_VTF);
-
-  if (SecondVTF) {
-    Vtf2TotalSize += sizeof (EFI_FFS_FILE_HEADER);
-    Vtf2LastStartAddress -= sizeof (EFI_FFS_FILE_HEADER);
-    Status = UpdateFfsHeader (Vtf2TotalSize, SECOND_VTF);
-    if (Status != EFI_SUCCESS) {
-      CleanUpMemory ();
-      return Status;
-    }
-
-    //
-    // Update the VTF buffer into specified VTF binary file
-    //
-    Status  = WriteVtfBinary (OutFileName2, Vtf2TotalSize, SECOND_VTF);
-  }
-
-  CleanUpMemory ();
-
-  return Status;
-}
-
-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_OUT_OF_RESOURCES - System out of resources for memory allocation.
-
---*/
-{
-  EFI_STATUS  Status;
-  FILE        *Fp;
-  UINT64      *StartAddressPtr;
-  UINTN       FirstFwVSize;
-
-  StartAddressPtr   = malloc (sizeof (UINT64));
-  if (StartAddressPtr == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-  *StartAddressPtr = StartAddress;
-
-  Fp = fopen (LongFilePath (OutFileName1), "rb");
-
-  if (Fp == NULL) {
-    Error (NULL, 0, 0001, "Error opening file", OutFileName1);
-    if (StartAddressPtr) {
-      free (StartAddressPtr);
-    }
-    return EFI_ABORTED;
-  }
-
-  FirstFwVSize = _filelength (fileno (Fp));
-  fseek (Fp, (long) (FirstFwVSize - (UINTN) (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT)), SEEK_SET);
-  fwrite ((VOID *) StartAddressPtr, sizeof (UINT64), 1, Fp);
-
-  if (Fp) {
-    fclose (Fp);
-  }
-
-  if (StartAddressPtr) {
-    free (StartAddressPtr);
-  }
-
-  Status = EFI_SUCCESS;
-  return Status;
-}
-
-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.
-
---*/
-{
-  FILE    *SourceFile;
-  FILE    *DestFile;
-  CHAR8   Buffer[MAX_LONG_FILE_PATH];
-  CHAR8   Type[MAX_LONG_FILE_PATH];
-  CHAR8   Address[MAX_LONG_FILE_PATH];
-  CHAR8   Section[MAX_LONG_FILE_PATH];
-  CHAR8   Token[MAX_LONG_FILE_PATH];
-  CHAR8   BaseToken[MAX_LONG_FILE_PATH];
-  CHAR8   FormatString[MAX_LINE_LEN];
-  UINT64  TokenAddress;
-  long    StartLocation;
-
-  //
-  // Verify input parameters.
-  //
-  if (BaseAddress == 0 || DestFileName == NULL || SourceFileName == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Open the source file
-  //
-  SourceFile = fopen (LongFilePath (SourceFileName), "r");
-  if (SourceFile == NULL) {
-
-    //
-    // SYM files are not required.
-    //
-    return EFI_SUCCESS;
-  }
-
-  //
-  // Use the file name minus extension as the base for tokens
-  //
-  if (strlen (SourceFileName) >= MAX_LONG_FILE_PATH) {
-    fclose (SourceFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
-    return EFI_ABORTED;
-  }
-  strncpy (BaseToken, SourceFileName, MAX_LONG_FILE_PATH - 1);
-  BaseToken[MAX_LONG_FILE_PATH - 1] = 0;
-  strtok (BaseToken, ". \t\n");
-  if (strlen (BaseToken) + strlen ("__") >= MAX_LONG_FILE_PATH) {
-    fclose (SourceFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The source file name is too long.");
-    return EFI_ABORTED;
-  }
-  strncat (BaseToken, "__", MAX_LONG_FILE_PATH - strlen (BaseToken) - 1);
-
-  //
-  // Open the destination file
-  //
-  DestFile = fopen (LongFilePath (DestFileName), "a+");
-  if (DestFile == NULL) {
-    fclose (SourceFile);
-    Error (NULL, 0, 0001, "Error opening file", DestFileName);
-    return EFI_ABORTED;
-  }
-
-  //
-  // If this is the beginning of the output file, write the symbol format info.
-  //
-  if (fseek (DestFile, 0, SEEK_END) != 0) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "not at the beginning of the output file.");
-    return EFI_ABORTED;
-  }
-
-  StartLocation = ftell (DestFile);
-
-  if (StartLocation == 0) {
-    fprintf (DestFile, "TEXTSYM format | V1.0\n");
-  } else if (StartLocation == -1) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "StartLocation error");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Read the first line
-  //
-  if (fgets (Buffer, MAX_LONG_FILE_PATH, SourceFile) == NULL) {
-    Buffer[0] = 0;
-  }
-
-  //
-  // Make sure it matches the expected sym format
-  //
-  if (strcmp (Buffer, "TEXTSYM format | V1.0\n")) {
-    fclose (SourceFile);
-    fclose (DestFile);
-    Error (NULL, 0, 2000, "Invalid parameter", "The symbol file does not match the expected TEXTSYM format (V1.0.)");
-    return EFI_ABORTED;
-  }
-
-  //
-  // Generate the format string for fscanf
-  //
-  sprintf (
-    FormatString,
-    "%%%us | %%%us | %%%us | %%%us\n",
-    (unsigned) sizeof (Type) - 1,
-    (unsigned) sizeof (Address) - 1,
-    (unsigned) sizeof (Section) - 1,
-    (unsigned) sizeof (Token) - 1
-    );
-
-  //
-  // Read in the file
-  //
-  while (feof (SourceFile) == 0) {
-
-    //
-    // Read a line
-    //
-    if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) == 4) {
-
-      //
-      // Get the token address
-      //
-      AsciiStringToUint64 (Address, TRUE, &TokenAddress);
-      if (TokenAddress > FileSize) {
-        //
-        // Symbol offset larger than FileSize. This Symbol can't be in Bin file. Don't print them.
-        //
-        break;
-      }
-
-      //
-      // Add the base address, the size of the FFS file header and the size of the peim header.
-      //
-      TokenAddress += BaseAddress &~IPF_CACHE_BIT;
-
-      fprintf (DestFile, "%s | %016llX | ", Type, (unsigned long long) TokenAddress);
-      fprintf (DestFile, "%s | %s\n    %s\n", Section, Token, BaseToken);
-    }
-  }
-
-  fclose (SourceFile);
-  fclose (DestFile);
-  return EFI_SUCCESS;
-}
-
-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
-
---*/
-{
-  FIT_TABLE *TmpFitPtr;
-  UINT64    FitTableAdd;
-  UINT64    FitTableAddOffset;
-  UINTN     RelativeAddress;
-  UINTN     Size;
-
-  //
-  // Read the Fit Table address from Itanium-based address map.
-  //
-  FitTableAddOffset = Fv1EndAddress - (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD);
-
-  //
-  // Translate this Itanium-based address in terms of local buffer address which
-  // contains the image for Boot Strapped File
-  //
-  GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, FIRST_VTF);
-  FitTableAdd = *(UINTN *) RelativeAddress;
-
-  GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF);
-
-  TmpFitPtr = (FIT_TABLE *) RelativeAddress;
-
-  Size      = TmpFitPtr->CompSize * 16;
-
-  if ((TmpFitPtr->CvAndType & CHECKSUM_BIT_MASK) >> 7) {
-    TmpFitPtr->CheckSum = 0;
-    TmpFitPtr->CheckSum = CalculateChecksum8 ((UINT8 *) TmpFitPtr, Size);
-  } else {
-    TmpFitPtr->CheckSum = 0;
-  }
-
-  return EFI_SUCCESS;
-}
-
-VOID
-Version (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  Displays the standard utility information to SDTOUT
-
-Arguments:
-
-  None
-
-Returns:
-
-  None
-
---*/
-{
-  fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);
-}
-
-VOID
-Usage (
-  VOID
-  )
-/*++
-
-Routine Description:
-
-  Displays the utility usage syntax to STDOUT
-
-Arguments:
-
-  None
-
-Returns:
-
-  None
-
---*/
-{
-  //
-  // Summary usage
-  //
-  fprintf (stdout, "Usage: %s [options] <-f input_file> <-r BaseAddress> <-s FwVolumeSize>\n\n", UTILITY_NAME);
-
-  //
-  // Copyright declaration
-  //
-  fprintf (stdout, "Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.\n\n");
-  //
-  // Details Option
-  //
-  fprintf (stdout, "Options:\n");
-  fprintf (stdout, "  -f Input_file,   --filename Input_file\n\
-                        Input_file is name of the BS Image INF file\n");
-  fprintf (stdout, "  -r BaseAddress,  --baseaddr BaseAddress\n\
-                        BaseAddress is the starting address of Firmware Volume\n\
-                        where Boot Strapped Image will reside.\n");
-  fprintf (stdout, "  -s FwVolumeSize, --size FwVolumeSize\n\
-                        FwVolumeSize is the size of Firmware Volume.\n");
-  fprintf (stdout, "  -o FileName,     --output FileName\n\
-                        File will be created to store the ouput content.\n");
-  fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");
-  fprintf (stdout, "  --version             Show program's version number and exit.\n");
-  fprintf (stdout, "  -h, --help            Show this help message and exit.\n");
-  fprintf (stdout, "  -q, --quiet           Disable all messages except FATAL ERRORS.\n");
-  fprintf (stdout, "  -d, --debug [#, 0-9]  Enable debug messages at level #.\n");
-}
-
-int
-main (
-  IN  int  argc,
-  IN  char  **argv
-  )
-/*++
-
-Routine Description:
-
-  This utility uses GenVtf.dll to build a Boot Strap File Image which will be
-  part of firmware volume image.
-
-Arguments:
-
-  argc   - The count of the parameters
-  argv   - The parameters
-
-
-Returns:
-
-  0   - No error conditions detected.
-  1   - One or more of the input parameters is invalid.
-  2   - A resource required by the utility was unavailable.
-      - Most commonly this will be memory allocation or file creation.
-  3   - GenFvImage.dll could not be loaded.
-  4   - Error executing the GenFvImage dll.
-  5   - Now this tool does not support the IA32 platform
-
---*/
-{
-  UINT8          Index;
-  UINT64         StartAddress1;
-  UINT64         StartAddress2;
-  UINT64         FwVolSize1;
-  UINT64         FwVolSize2;
-  BOOLEAN       FirstRoundO;
-  BOOLEAN       FirstRoundB;
-  BOOLEAN       FirstRoundS;
-  EFI_STATUS    Status;
-  FILE          *VtfFP;
-  CHAR8         *VtfFileName;
-
-  SetUtilityName (UTILITY_NAME);
-
-  //
-  // Initialize variables
-  //
-  StartAddress1 = 0;
-  StartAddress2 = 0;
-  FwVolSize1    = 0;
-  FwVolSize2    = 0;
-  FirstRoundB   = TRUE;
-  FirstRoundS   = TRUE;
-  FirstRoundO   = TRUE;
-  DebugMode     = FALSE;
-  OutFileName1  = NULL;
-  OutFileName2  = NULL;
-  VtfFP = NULL;
-  DebugLevel = 0;
-
-  //
-  // Verify the correct number of arguments
-  //
-  if (argc == 1) {
-    Usage();
-    return 0;
-  }
-
-  if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) {
-    Usage();
-    return 0;
-  }
-
-  if ((strcmp(argv[1], "--version") == 0)) {
-    Version();
-    return 0;
-  }
-
-  //
-  // Parse the command line arguments
-  //
-  for (Index = 1; Index < argc; Index += 2) {
-    if ((stricmp (argv[Index], "-o") == 0) || (stricmp (argv[Index], "--output") == 0)) {
-      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
-        Error (NULL, 0, 1003, "Invalid option value", "Output file is missing for -o option");
-        goto ERROR;
-      }
-      //
-      // Get the output file name
-      //
-      VTF_OUTPUT = TRUE;
-      if (FirstRoundO) {
-        //
-        // It's the first output file name
-        //
-        OutFileName1 = (CHAR8 *)argv[Index+1];
-        FirstRoundO = FALSE;
-      } else {
-        //
-        //It's the second output file name
-        //
-        OutFileName2 = (CHAR8 *)argv[Index+1];
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-f") == 0) || (stricmp (argv[Index], "--filename") == 0)) {
-      if (argv[Index + 1] == NULL || argv[Index + 1][0] == '-') {
-        Error (NULL, 0, 1003, "Invalid option value", "BS Image INF file is missing for -f option");
-        goto ERROR;
-      }
-      //
-      // Get the input VTF file name
-      //
-      VtfFileName = argv[Index+1];
-      if (VtfFP != NULL) {
-        //
-        // VTF file name has been given previously, override with the new value
-        //
-        fclose (VtfFP);
-      }
-      VtfFP = fopen (LongFilePath (VtfFileName), "rb");
-      if (VtfFP == NULL) {
-        Error (NULL, 0, 0001, "Error opening file", VtfFileName);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-r") == 0) || (stricmp (argv[Index], "--baseaddr") == 0)) {
-      if (FirstRoundB) {
-        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress1);
-        FirstRoundB = FALSE;
-      } else {
-        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAddress2);
-      }
-      if (Status != EFI_SUCCESS) {
-        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV start address.", argv[Index + 1]);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-s") == 0) || (stricmp (argv[Index], "--size") == 0)) {
-      if (FirstRoundS) {
-        Status      = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize1);
-        FirstRoundS = FALSE;
-      } else {
-        Status = AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSize2);
-        SecondVTF = TRUE;
-      }
-
-      if (Status != EFI_SUCCESS) {
-        Error (NULL, 0, 2000, "Invalid option value", "%s is Bad FV size.", argv[Index + 1]);
-        goto ERROR;
-      }
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-v") == 0) || (stricmp (argv[Index], "--verbose") == 0)) {
-      VerboseMode = TRUE;
-      Index--;
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-q") == 0) || (stricmp (argv[Index], "--quiet") == 0)) {
-      QuietMode = TRUE;
-      Index--;
-      continue;
-    }
-
-    if ((stricmp (argv[Index], "-d") == 0) || (stricmp (argv[Index], "--debug") == 0)) {
-      //
-      // debug level specified
-      //
-      Status = AsciiStringToUint64(argv[Index + 1], FALSE, &DebugLevel);
-      if (EFI_ERROR (Status)) {
-        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[Index], argv[Index + 1]);
-        goto ERROR;
-      }
-      if (DebugLevel > 9)  {
-        Error (NULL, 0, 2000, "Invalid option value", "Unrecognized argument %s.", argv[Index + 1]);
-        goto ERROR;
-      }
-      if((DebugLevel <= 9) &&(DebugLevel >= 5)) {
-        DebugMode = TRUE;
-      } else {
-        DebugMode = FALSE;
-      }
-      continue;
-    }
-
-    Error (NULL, 0, 2000, "Invalid parameter", "Unrecognized argument %s.", argv[Index]);
-    goto ERROR;
-  }
-
-  if (VtfFP == NULL) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No BS Image INF file is specified");
-    goto ERROR;
-  }
-
-  if (FirstRoundB) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No FV base address is specified");
-    goto ERROR;
-  }
-
-  if (FirstRoundS) {
-    Error (NULL, 0, 2000, "Invalid parameter", "No FV Size is specified");
-    goto ERROR;
-  }
-  //
-  // All Parameters has been parsed, now set the message print level
-  //
-  if (QuietMode) {
-    SetPrintLevel(40);
-  } else if (VerboseMode) {
-    SetPrintLevel(15);
-  } else if (DebugMode) {
-    SetPrintLevel(DebugLevel);
-  }
-
-  if (VerboseMode) {
-    VerboseMsg("%s tool start.\n", UTILITY_NAME);
-  }
-
-  if (VTF_OUTPUT == FALSE) {
-    if (SecondVTF == TRUE) {
-      OutFileName1 = VTF_OUTPUT_FILE1;
-      OutFileName2 = VTF_OUTPUT_FILE2;
-    } else {
-      OutFileName1 = VTF_OUTPUT_FILE1;
-    }
-    SymFileName = VTF_SYM_FILE;
-  } else {
-    INTN OutFileNameLen;
-    INTN NewIndex;
-
-    assert (OutFileName1);
-    OutFileNameLen = strlen(OutFileName1);
-
-    for (NewIndex = OutFileNameLen; NewIndex > 0; --NewIndex) {
-      if (OutFileName1[NewIndex] == '/' || OutFileName1[NewIndex] == '\\') {
-        break;
-      }
-    }
-    if (NewIndex == 0) {
-      SymFileName = VTF_SYM_FILE;
-    } else {
-      INTN SymFileNameLen = NewIndex + 1 + strlen(VTF_SYM_FILE);
-      SymFileName = malloc(SymFileNameLen + 1);
-      if (SymFileName == NULL) {
-        Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!");
-        goto ERROR;
-      }
-      memcpy(SymFileName, OutFileName1, NewIndex + 1);
-      memcpy(SymFileName + NewIndex + 1, VTF_SYM_FILE, strlen(VTF_SYM_FILE));
-      SymFileName[SymFileNameLen] = '\0';
-    }
-    if (DebugMode) {
-      DebugMsg(UTILITY_NAME, 0, DebugLevel, SymFileName, NULL);
-    }
-  }
-
-  //
-  // Call the GenVtfImage
-  //
-  if (DebugMode) {
-    DebugMsg(UTILITY_NAME, 0, DebugLevel, "Start to generate the VTF image\n", NULL);
-  }
-  Status = GenerateVtfImage (StartAddress1, FwVolSize1, StartAddress2, FwVolSize2, VtfFP);
-
-  if (EFI_ERROR (Status)) {
-    switch (Status) {
-
-    case EFI_INVALID_PARAMETER:
-      Error (NULL, 0, 2000, "Invalid parameter", "Invalid parameter passed to GenVtf function.");
-      break;
-
-    case EFI_ABORTED:
-      Error (NULL, 0, 3000, "Invalid", "Error detected while creating the file image.");
-      break;
-
-    case EFI_OUT_OF_RESOURCES:
-      Error (NULL, 0, 4002, "Resource", "GenVtfImage function could not allocate required resources.");
-      break;
-
-    case EFI_VOLUME_CORRUPTED:
-      Error (NULL, 0, 3000, "Invalid", "No base address was specified.");
-      break;
-
-    default:
-      Error (NULL, 0, 3000, "Invalid", "GenVtfImage function returned unknown status %x.", (int) Status );
-      break;
-    }
-  }
-ERROR:
-  if (VtfFP != NULL) {
-    fclose (VtfFP);
-  }
-
-  if (DebugMode) {
-    DebugMsg(UTILITY_NAME, 0, DebugLevel, "VTF image generated successful\n", NULL);
-  }
-
-  if (VerboseMode) {
-    VerboseMsg("%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());
-  }
-  return GetUtilityStatus();
-}
diff --git a/BaseTools/Source/C/GenVtf/GenVtf.h b/BaseTools/Source/C/GenVtf/GenVtf.h
deleted file mode 100644
index 62c61aa84e..0000000000
--- a/BaseTools/Source/C/GenVtf/GenVtf.h
+++ /dev/null
@@ -1,326 +0,0 @@
-/** @file
-This file contains the relevant declarations required to generate Boot Strap File
-
-Copyright (c) 1999 - 2018, 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
diff --git a/BaseTools/Source/C/GenVtf/Makefile b/BaseTools/Source/C/GenVtf/Makefile
deleted file mode 100644
index 957f25bd16..0000000000
--- a/BaseTools/Source/C/GenVtf/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-## @file
-# Windows makefile for 'GenVtf' module build.
-#
-# Copyright (c) 2007 - 2010, 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.
-#
-!INCLUDE ..\Makefiles\ms.common
-
-APPNAME = GenVtf
-
-LIBS = $(LIB_PATH)\Common.lib
-
-OBJECTS = GenVtf.obj
-
-!INCLUDE ..\Makefiles\ms.app
-
diff --git a/BaseTools/Source/C/Makefile b/BaseTools/Source/C/Makefile
index 1246d23afd..1f235e5202 100644
--- a/BaseTools/Source/C/Makefile
+++ b/BaseTools/Source/C/Makefile
@@ -27,7 +27,6 @@ APPLICATIONS = \
   GenFw \
   GenPage \
   GenSec \
-  GenVtf \
   LzmaCompress \
   Split \
   TianoCompress \
diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
index 67454ad74b..06a877ee6b 100755
--- a/BaseTools/toolsetup.bat
+++ b/BaseTools/toolsetup.bat
@@ -265,7 +265,6 @@ IF NOT EXIST "%EDK_TOOLS_BIN%\GenFv.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenFw.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenPage.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\GenSec.exe" goto check_c_tools
-IF NOT EXIST "%EDK_TOOLS_BIN%\GenVtf.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\Split.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\TianoCompress.exe" goto check_c_tools
 IF NOT EXIST "%EDK_TOOLS_BIN%\VfrCompile.exe" goto check_c_tools
-- 
2.18.0.windows.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-11-27  1:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-23  5:47 [PATCH] BaseTools: Remove GenVtf Shenglei Zhang
2018-11-23 15:10 ` Gao, Liming
  -- strict thread matches above, loose matches on Subject: below --
2018-11-27  1:53 Shenglei Zhang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox