* [PATCH v3] BaseTools: Remove GenVtf
@ 2018-12-03 1:58 Shenglei Zhang
2018-12-05 0:07 ` Gao, Liming
0 siblings, 1 reply; 2+ messages in thread
From: Shenglei Zhang @ 2018-12-03 1:58 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.
v3:Remove BinWrappers/PosixLike/GenVtf and the user manual
of GenVtf.
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/BinWrappers/PosixLike/GenVtf | 29 -
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 -
.../UserManuals/GenVtf_Utility_Man_Page.rtf | 333 --
BaseTools/toolsetup.bat | 1 -
10 files changed, 3546 deletions(-)
delete mode 100755 BaseTools/BinWrappers/PosixLike/GenVtf
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
delete mode 100644 BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
diff --git a/BaseTools/BinWrappers/PosixLike/GenVtf b/BaseTools/BinWrappers/PosixLike/GenVtf
deleted file mode 100755
index 0945d86d92..0000000000
--- a/BaseTools/BinWrappers/PosixLike/GenVtf
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-
-full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
-dir=$(dirname "$full_cmd")
-cmd=${full_cmd##*/}
-
-if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
-then
- exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
-elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
-then
- if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
- then
- echo "BaseTools C Tool binary was not found ($cmd)"
- echo "You may need to run:"
- echo " make -C $EDK_TOOLS_PATH/Source/C"
- else
- exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
- fi
-elif [ -e "$dir/../../Source/C/bin/$cmd" ]
-then
- exec "$dir/../../Source/C/bin/$cmd" "$@"
-else
- echo "Unable to find the real '$cmd' to run"
- echo "This message was printed by"
- echo " $0"
- exit 127
-fi
-
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/UserManuals/GenVtf_Utility_Man_Page.rtf b/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
deleted file mode 100644
index e7ef833133..0000000000
--- a/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
+++ /dev/null
@@ -1,333 +0,0 @@
-{\rtf1\adeflang1025\ansi\ansicpg1252\uc2\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}
-{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New{\*\falt Courier New};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
-{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri{\*\falt Century Gothic};}
-{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt Times New Roman};}{\f41\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}
-{\f43\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana{\*\falt Verdana};}{\f113\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;}
-{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
-{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}
-{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
-{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri{\*\falt Century Gothic};}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}
-{\f258\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\f259\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\f261\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}
-{\f262\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}{\f263\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\f264\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}
-{\f265\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\f266\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\f278\fbidi \fmodern\fcharset238\fprq1 Courier New CE{\*\falt Courier New};}
-{\f279\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr{\*\falt Courier New};}{\f281\fbidi \fmodern\fcharset161\fprq1 Courier New Greek{\*\falt Courier New};}{\f282\fbidi \fmodern\fcharset162\fprq1 Courier New Tur{\*\falt Courier New};}
-{\f283\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew){\*\falt Courier New};}{\f284\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic){\*\falt Courier New};}{\f285\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic{\*\falt Courier New};}
-{\f286\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese){\*\falt Courier New};}{\f390\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f598\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}
-{\f599\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f601\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f602\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f605\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}
-{\f606\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f628\fbidi \fswiss\fcharset238\fprq2 Calibri CE{\*\falt Century Gothic};}{\f629\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr{\*\falt Century Gothic};}
-{\f631\fbidi \fswiss\fcharset161\fprq2 Calibri Greek{\*\falt Century Gothic};}{\f632\fbidi \fswiss\fcharset162\fprq2 Calibri Tur{\*\falt Century Gothic};}{\f635\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic{\*\falt Century Gothic};}
-{\f636\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese){\*\falt Century Gothic};}{\f648\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt Times New Roman};}{\f649\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt Times New Roman};}
-{\f651\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt Times New Roman};}{\f652\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt Times New Roman};}{\f653\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt Times New Roman};}
-{\f654\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt Times New Roman};}{\f655\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt Times New Roman};}{\f656\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt Times New Roman};}
-{\f657\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt Times New Roman};}{\f668\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f669\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}{\f671\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}
-{\f672\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f675\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f676\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}{\f688\fbidi \fswiss\fcharset238\fprq2 Verdana CE{\*\falt Verdana};}
-{\f689\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr{\*\falt Verdana};}{\f691\fbidi \fswiss\fcharset161\fprq2 Verdana Greek{\*\falt Verdana};}{\f692\fbidi \fswiss\fcharset162\fprq2 Verdana Tur{\*\falt Verdana};}
-{\f695\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic{\*\falt Verdana};}{\f696\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese){\*\falt Verdana};}{\f1390\fbidi \fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;}
-{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}
-{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}
-{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}
-{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}
-{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}
-{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}
-{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}
-{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}
-{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}
-{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}
-{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}
-{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}
-{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}
-{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}
-{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE{\*\falt Century Gothic};}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr{\*\falt Century Gothic};}
-{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek{\*\falt Century Gothic};}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur{\*\falt Century Gothic};}
-{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic{\*\falt Century Gothic};}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese){\*\falt Century Gothic};}
-{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}
-{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};}
-{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}
-{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;
-\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;
-\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red8\green96\blue168;\red0\green127\blue127;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
-\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat heading 1;}{\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025
-\ltrch\fcs0 \fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \slink16 \sqformat heading 2;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
-\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
-\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext11 \ssemihidden \sunhideused
-Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\kerning32\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \slocked \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0
-\b\i\fs28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \slocked Heading 2 Char;}{\s17\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af39\afs16\alang1025 \ltrch\fcs0
-\fs16\lang1033\langfe1033\loch\f39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused \styrsid11091224 Balloon Text;}{\*\cs18 \additive \rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16
-\sbasedon10 \slink17 \slocked \ssemihidden \styrsid11091224 Balloon Text Char;}{\*\cs19 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid4072718 annotation reference;}{
-\s20\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033
-\sbasedon0 \snext20 \slink21 \ssemihidden \sunhideused \styrsid4072718 annotation text;}{\*\cs21 \additive \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f43\fs20 \sbasedon10 \slink20 \slocked \ssemihidden \styrsid4072718 Comment Text Char;}{
-\s22\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033
-\sbasedon20 \snext20 \slink23 \ssemihidden \sunhideused \styrsid4072718 annotation subject;}{\*\cs23 \additive \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0 \b\f43\fs20 \sbasedon21 \slink22 \slocked \ssemihidden \styrsid4072718 Comment Subject Char;}{
-\s24\ql \li0\ri20\sb60\sa60\sl-200\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin20\lin0\itap0 \rtlch\fcs1 \af0\afs16\alang1025 \ltrch\fcs0 \fs16\cf1\lang1033\langfe1033\loch\f43\hich\af43\dbch\af13\cgrid\langnp1033\langfenp1033
-\sbasedon0 \snext24 \spriority0 \styrsid12480811 CellBodyLeft;}{\*\cs25 \additive \b\f2\cf13 \spriority0 \styrsid12480811 CodeCharacter;}{\*\ts26\tsrowd\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh
-\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
-\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052
-\sbasedon11 \snext26 \spriority59 \styrsid12480811 Table Grid;}}{\*\revtbl {Unknown;}{Zhu, Yonghong;}}{\*\rsidtbl \rsid351840\rsid2906062\rsid3369612\rsid3607127\rsid4064336\rsid4072718\rsid4999604\rsid5056671\rsid5793818\rsid5911148\rsid7230979\rsid8326873\rsid8600807\rsid11091224
-\rsid12198464\rsid12480811\rsid13438422\rsid14880849\rsid15277707\rsid15819932}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Zhu, Yonghong}
-{\creatim\yr2010\mo10\dy6\hr15\min21}{\revtim\yr2016\mo8\dy9\hr10\min29}{\version15}{\edmins1040}{\nofpages3}{\nofwords496}{\nofchars2832}{\nofcharsws3322}{\vern57441}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
-\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
-\deftab360\widowctrl\ftnbj\aenddoc\revisions\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
-\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot13438422 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang
-{\pntxta \hich .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \hich )}}{\*\pnseclvl5
-\pndec\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl8
-\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0
-\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
-\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Name
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf.exe - generate the Boot Strap File (AKA Volume Top File, or VTF) for IPF images
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Synopsis
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs18
-\ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf.exe [}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid5056671 \hich\af43\dbch\af31505\loch\f43 -v | -q | -d}{\rtlch\fcs1
-\ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid3607127 \hich\af43\dbch\af31505\loch\f43 ]}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid5056671 \hich\af43\dbch\af31505\loch\f43
- }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062 \hich\af43\dbch\af31505\loch\f43 [-o }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid15819932
-\hich\af43\dbch\af31505\loch\f43 <}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062 \hich\af43\dbch\af31505\loch\f43 OutputFile}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
-\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid15819932 \hich\af43\dbch\af31505\loch\f43 >}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062 \hich\af43\dbch\af31505\loch\f43 ] \hich\f43 \endash
-\hich\af43\dbch\af31505\loch\f43 f <FileName> -r <BaseAddr> -s <Size>}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid7230979
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062 \hich\af43\dbch\af31505\loch\f43 GenVtf.exe \hich\f43 \endash \loch\f43 h
-\par \hich\af43\dbch\af31505\loch\f43 GenVtf.exe --version}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062\charrsid351840
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Description
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 generates}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
-\hich\af43\dbch\af31505\loch\f43 the Boot Strap File (AKA Volume Top File, or VTF) for IPF images. This utility }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 parses}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 the input BSF inf file and get}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 s}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
-\hich\af43\dbch\af31505\loch\f43 the component information. If all the\hich\af43\dbch\af31505\loch\f43 }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 required components are in a single }{\rtlch\fcs1
-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 VTF file, then only one VTF Base Address and Size }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is}{\rtlch\fcs1
-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 needed and only one raw data output file and one symbol output file }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 (}{
-\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 which is the symbol of raw data}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 ) is needed}{\rtlch\fcs1
-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 . If there}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is a }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 component required }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 for the}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
-\hich\af43\dbch\af31505\loch\f43 the second V\hich\af43\dbch\af31505\loch\f43 TF file but there}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 no second VTF Base Address and Size specified in }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 the }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 command line interface, then this utility will exit with }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 a }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 related error message; if there}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is a }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
-\hich\af43\dbch\af31505\loch\f43 second VTF Base Address and Size specified, then two raw data output files and one sym\hich\af43\dbch\af31505\loch\f43 bol output file}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
-\hich\af43\dbch\af31505\loch\f43 will be created}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 .
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Options}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
-\b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid3369612\charrsid12198464 \hich\af43\dbch\af31505\loch\f43 If no options ar}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid3369612 \hich\af43\dbch\af31505\loch\f43 e specified, tool prints usage.}{\rtlch\fcs1
-\ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid4072718
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -f, --filename BS_INFFile
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Name of the BS Image INF file to use
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -r, --baseaddr hexaddress
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 The Base Address is the starting address of the Firmware Volume wh\hich\af43\dbch\af31505\loch\f43 ere the Boot Strapped Image will reside
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -s, --size Size
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 The size of the Firmware Volume
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -o, --output Filename
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 VTF Filename that will be created
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 --version
-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979 \tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Print version and copyright of this program and exit
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -v, --verbose
-\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Turn on verbose outpu\hich\af43\dbch\af31505\loch\f43
-t with informational messages printed. This is a count value, so specifying \hich\f43 \endash \loch\f43 vv can be used to increase the verbosity level.
-\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -q, --quiet
-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979 \tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Disable all messages except FATAL ERRORS
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -d, --debug [#]
-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979 \tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Enable debug messages, at level #
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 -h, --help
-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979 \tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Print copyright, version and usage of this program and exit
-\par }\pard\plain \ltrpar\s2\ql \fi-1440\li0\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx0\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0\pararsid12480811 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid12480811\charrsid3607127 {\*\bkmkstart OLE_LINK7}{\*\bkmkstart OLE_LINK8}\hich\af43\dbch\af31505\loch\f43
-Status codes returned
-\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts26\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
-\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark \cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark \cellx8712\pard\plain \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin20\lin0\pararsid5911148\yts26 \rtlch\fcs1
-\af0\afs16\alang1025 \ltrch\fcs0 \fs16\cf1\lang1033\langfe1033\loch\af43\hich\af43\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0
-\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811\charrsid8600807 \hich\af2\dbch\af13\loch\f2 STATUS_SUCCESS}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811 \hich\af43\dbch\af13\loch\f43 }{\rtlch\fcs1 \ab\af2\afs18
-\ltrch\fcs0 \cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811\charrsid4999604 \tab }{\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0 \cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811 0}{\rtlch\fcs1
-\ab\af2\afs18 \ltrch\fcs0 \cs25\b\f2\fs18\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811 \cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811 \hich\af43\dbch\af13\loch\f43 The action was completed as requested.}{\rtlch\fcs1 \af0 \ltrch\fcs0
-\kerning2\insrsid12480811 \cell }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \fs20\insrsid12480811 \trowd \irow0\irowband0\ltrrow\ts26\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb
-\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
-\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark \cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark \cellx8712\row \ltrrow}\pard\plain \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin20\lin0\pararsid5911148\yts26 \rtlch\fcs1
-\af0\afs16\alang1025 \ltrch\fcs0 \fs16\cf1\lang1033\langfe1033\loch\af43\hich\af43\dbch\af13\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0 \cs25\b\f2\fs18\cf13\kerning2\insrsid12480811\charrsid8600807 \hich\af2\dbch\af13\loch\f2
-STATUS_ERROR}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811 \hich\af43\dbch\af13\loch\f43 }{\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0 \cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811\charrsid4999604 \tab \tab }{\rtlch\fcs1
-\ab\af2\afs18 \ltrch\fcs0 \cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811 \hich\af2\dbch\af13\loch\f2 2}{\rtlch\fcs1 \af41\afs19 \ltrch\fcs0
-\cs25\f41\fs19\cf0\lang1033\langfe2052\langfenp2052\insrsid12480811\charrsid8600807 \cell }\pard \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin20\lin0\pararsid15277707\yts26 {
-\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811 \hich\af43\dbch\af13\loch\f43 The action failed.\cell }\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1
-\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0
-\fs20\insrsid12480811 \trowd \irow1\irowband1\lastrow \ltrrow\ts26\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
-\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdrrows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark \cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark \cellx8712\row }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025
-\ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 {\*\bkmkend OLE_LINK7}{\*\bkmkend OLE_LINK8}\hich\af43\dbch\af31505\loch\f43 Example}{
-\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Generate one VTF file with inf file name, base address and size specified in command line and without output filename specified. }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 Default}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 \hich\f43 filename \'93\loch\f43 \hich\f43 VTF1.RAW\'94\loch\f43 will be used.
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 f bsf.inf \hich\f43 \endash \loch\f43 r 0xFFE00000 \hich\f43 \endash \loch\f43 s 0x200000
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Generate two VTF files with inf file name\hich\af43\dbch\af31505\loch\f43
-, base address and size specified in command line and without output filename specified. }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 Default}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 \hich\f43 filename \'93\loch\f43 \hich\f43 VTF1.RAW\'94\loch\f43 \hich\f43 and \'93\loch\f43 \hich\f43 VTF2.RAW\'94\loch\f43 will be used.
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 f bsf.inf \hich\f43 \endash \loch\f43 r 0xFFE00000 \hich\f43 \endash \loch\f43 s 0x200000 \hich\f43 \endash \loch\f43
-r 0xFFD00000 \hich\f43 \endash \loch\f43 s 0x100000
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Generate one VTF file with inf file name,\hich\af43\dbch\af31505\loch\f43 base address and size specified in command line and output filename specified.
-
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 o file.tmp \hich\f43 \endash \loch\f43 f bsf.inf \hich\f43 \endash \loch\f43 r 0xFFE00000 \hich\f43 \endash \loch\f43
-s 0x200000
-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Generate two VTF files with inf file name, base address and size specified in command line and output filename specified.
-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 o file1.tmp \hich\f43 \endash \loch\f43 o file2.tmp \hich\f43 \endash \loch\f43 f bsf.inf \hich\f43 \endash \loch\f43
-r 0xFFE00000 \hich\f43 \endash \loch\f43 s 0x200000 \hich\f43 \endash \loch\f43 r 0xFFD00000 \hich\f43 \endash \loch\f43 s 0x100000
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Bugs}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
-\b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 No known bugs.
-\par \hich\af43\dbch\af31505\loch\f43 Report bugs to }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm1195920029\insrsid4064336\charrsid14420013 \hich\af43\dbch\af31505\loch\f43 edk2-\hich\af43\dbch\af31505\loch\f43 devel
-\hich\af43\dbch\af31505\loch\f43 @lists.01.\hich\af43\dbch\af31505\loch\f43 org}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \deleted\fs18\cf1\revauthdel1\revdttmdel1195920029\insrsid7230979\delrsid4064336 \hich\af43\dbch\af31505\loch\f43 edk
-\hich\af43\dbch\af31505\loch\f43 2-buildtools-devel@lists.sourceforge.net}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Files}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
-\b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 None
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 See}{\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
-\b\fs28\cf18\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 }{\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 also}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18
-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 None
-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
-\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 License}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
-\b\f0\fs28\cf18\insrsid7230979
-\par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Copyright (c) 1999 - }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 201}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
-\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid351840 \hich\af43\dbch\af31505\loch\f43 1}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 , Intel Corporation. All rights reserved.
-\par \hich\af43\dbch\af31505\loch\f43 This program and the accompanying materials
-\par \hich\af43\dbch\af31505\loch\f43 are licensed and made available under the terms and conditions of the BSD License
-\par \hich\af43\dbch\af31505\loch\f43 which accompanies this distribution. The full text of the license may be found at
-\par \hich\af43\dbch\af31505\loch\f43 http://opensource.org/licenses/bsd-license.php\tab
-\par
-\par \hich\af43\dbch\af31505\loch\f43 THE PROGRAM IS DISTRIBUTED UNDER THE BSD L\hich\af43\dbch\af31505\loch\f43 ICENSE ON AN "AS IS" BASIS,
-\par \hich\af43\dbch\af31505\loch\f43 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
-\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
-9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
-5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
-b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
-0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
-a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
-c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
-0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
-a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
-6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
-4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
-4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f
-7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87
-615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad
-79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b
-5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab
-999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9
-699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586
-8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6
-0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f
-9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be
-15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979
-3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d
-32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a
-f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86
-e877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb
-44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a
-6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c
-3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256
-5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276
-b9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8
-c33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e
-51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95
-b21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff
-6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6
-9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239
-b75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449
-59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8
-2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468
-656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4
-350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624
-52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141
-73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000000000000000
-0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000
-000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000000000000019
-0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b00001600000000
-000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027
-00000000000000000000000000a00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d0100009b0a00000000}
-{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
-617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
-6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
-656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
-{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1;\lsdqformat1 \lsdlocked0 heading 2;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;
-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;
-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
-\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;
-\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;
-\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;
-\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
-\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
-\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;
-\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;
-\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
-\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;
-\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;
-\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
-\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
-\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
-\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
-\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
-\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
-\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
-\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
-\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
-\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
-\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
-\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
-\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
-\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
-\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000
-4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
-d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000007075
-46d3e5f1d101feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000105000000000000}}
\ No newline at end of file
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] 2+ messages in thread
* Re: [PATCH v3] BaseTools: Remove GenVtf
2018-12-03 1:58 [PATCH v3] BaseTools: Remove GenVtf Shenglei Zhang
@ 2018-12-05 0:07 ` Gao, Liming
0 siblings, 0 replies; 2+ messages in thread
From: Gao, Liming @ 2018-12-05 0:07 UTC (permalink / raw)
To: Zhang, Shenglei, edk2-devel@lists.01.org
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----Original Message-----
>From: Zhang, Shenglei
>Sent: Monday, December 03, 2018 9:59 AM
>To: edk2-devel@lists.01.org
>Cc: Zhu, Yonghong <yonghong.zhu@intel.com>; Gao, Liming
><liming.gao@intel.com>
>Subject: [PATCH v3] 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
>
>v2:Remove GenVtf in Makefile and GNUmakefile.
>
>v3:Remove BinWrappers/PosixLike/GenVtf and the user manual
> of GenVtf.
>
>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/BinWrappers/PosixLike/GenVtf | 29 -
> 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 -
> .../UserManuals/GenVtf_Utility_Man_Page.rtf | 333 --
> BaseTools/toolsetup.bat | 1 -
> 10 files changed, 3546 deletions(-)
> delete mode 100755 BaseTools/BinWrappers/PosixLike/GenVtf
> 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
> delete mode 100644 BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
>
>diff --git a/BaseTools/BinWrappers/PosixLike/GenVtf
>b/BaseTools/BinWrappers/PosixLike/GenVtf
>deleted file mode 100755
>index 0945d86d92..0000000000
>--- a/BaseTools/BinWrappers/PosixLike/GenVtf
>+++ /dev/null
>@@ -1,29 +0,0 @@
>-#!/usr/bin/env bash
>-
>-full_cmd=${BASH_SOURCE:-$0} # see
>http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
>good choice here
>-dir=$(dirname "$full_cmd")
>-cmd=${full_cmd##*/}
>-
>-if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
>-then
>- exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
>-elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
>-then
>- if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
>- then
>- echo "BaseTools C Tool binary was not found ($cmd)"
>- echo "You may need to run:"
>- echo " make -C $EDK_TOOLS_PATH/Source/C"
>- else
>- exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
>- fi
>-elif [ -e "$dir/../../Source/C/bin/$cmd" ]
>-then
>- exec "$dir/../../Source/C/bin/$cmd" "$@"
>-else
>- echo "Unable to find the real '$cmd' to run"
>- echo "This message was printed by"
>- echo " $0"
>- exit 127
>-fi
>-
>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/UserManuals/GenVtf_Utility_Man_Page.rtf
>b/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
>deleted file mode 100644
>index e7ef833133..0000000000
>--- a/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf
>+++ /dev/null
>@@ -1,333 +0,0 @@
>-
>{\rtf1\adeflang1025\ansi\ansicpg1252\uc2\adeff0\deff0\stshfdbch31505\stsh
>floch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang10
>33\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi
>\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New
>Roman{\*\falt Times};}
>-{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose
>02070309020205020404}Courier New{\*\falt Courier New};}{\f13\fbidi
>\fnil\fcharset134\fprq2{\*\panose
>02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
>-{\f34\fbidi \froman\fcharset0\fprq2{\*\panose
>02040503050406030204}Cambria Math;}{\f37\fbidi
>\fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri{\*\falt
>Century Gothic};}
>-{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose
>020b0604030504040204}Tahoma{\*\falt Times New Roman};}{\f41\fbidi
>\fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}
>-{\f43\fbidi \fswiss\fcharset0\fprq2{\*\panose
>020b0604030504040204}Verdana{\*\falt Verdana};}{\f113\fbidi
>\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;}
>-{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose
>02020603050405020304}Times New Roman{\*\falt
>Times};}{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose
>02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
>-{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose
>02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi
>\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New
>Roman{\*\falt Times};}
>-{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose
>02020603050405020304}Times New Roman{\*\falt
>Times};}{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose
>02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}
>-{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose
>020f0502020204030204}Calibri{\*\falt Century Gothic};}{\fbiminor\f31507\fbidi
>\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New
>Roman{\*\falt Times};}
>-{\f258\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt
>Times};}{\f259\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt
>Times};}{\f261\fbidi \froman\fcharset161\fprq2 Times New Roman
>Greek{\*\falt Times};}
>-{\f262\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt
>Times};}{\f263\fbidi \froman\fcharset177\fprq2 Times New Roman
>(Hebrew){\*\falt Times};}{\f264\fbidi \froman\fcharset178\fprq2 Times New
>Roman (Arabic){\*\falt Times};}
>-{\f265\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt
>Times};}{\f266\fbidi \froman\fcharset163\fprq2 Times New Roman
>(Vietnamese){\*\falt Times};}{\f278\fbidi \fmodern\fcharset238\fprq1
>Courier New CE{\*\falt Courier New};}
>-{\f279\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr{\*\falt Courier
>New};}{\f281\fbidi \fmodern\fcharset161\fprq1 Courier New Greek{\*\falt
>Courier New};}{\f282\fbidi \fmodern\fcharset162\fprq1 Courier New
>Tur{\*\falt Courier New};}
>-{\f283\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew){\*\falt
>Courier New};}{\f284\fbidi \fmodern\fcharset178\fprq1 Courier New
>(Arabic){\*\falt Courier New};}{\f285\fbidi \fmodern\fcharset186\fprq1
>Courier New Baltic{\*\falt Courier New};}
>-{\f286\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese){\*\falt
>Courier New};}{\f390\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt
>SimSun};}{\f598\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}
>-{\f599\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f601\fbidi
>\froman\fcharset161\fprq2 Cambria Math Greek;}{\f602\fbidi
>\froman\fcharset162\fprq2 Cambria Math Tur;}{\f605\fbidi
>\froman\fcharset186\fprq2 Cambria Math Baltic;}
>-{\f606\fbidi \froman\fcharset163\fprq2 Cambria Math
>(Vietnamese);}{\f628\fbidi \fswiss\fcharset238\fprq2 Calibri CE{\*\falt
>Century Gothic};}{\f629\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr{\*\falt
>Century Gothic};}
>-{\f631\fbidi \fswiss\fcharset161\fprq2 Calibri Greek{\*\falt Century
>Gothic};}{\f632\fbidi \fswiss\fcharset162\fprq2 Calibri Tur{\*\falt Century
>Gothic};}{\f635\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic{\*\falt Century
>Gothic};}
>-{\f636\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese){\*\falt Century
>Gothic};}{\f648\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt Times New
>Roman};}{\f649\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt Times
>New Roman};}
>-{\f651\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt Times New
>Roman};}{\f652\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt Times
>New Roman};}{\f653\fbidi \fswiss\fcharset177\fprq2 Tahoma
>(Hebrew){\*\falt Times New Roman};}
>-{\f654\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt Times New
>Roman};}{\f655\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt Times
>New Roman};}{\f656\fbidi \fswiss\fcharset163\fprq2 Tahoma
>(Vietnamese){\*\falt Times New Roman};}
>-{\f657\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt Times New
>Roman};}{\f668\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f669\fbidi
>\fmodern\fcharset204\fprq1 Consolas Cyr;}{\f671\fbidi
>\fmodern\fcharset161\fprq1 Consolas Greek;}
>-{\f672\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f675\fbidi
>\fmodern\fcharset186\fprq1 Consolas Baltic;}{\f676\fbidi
>\fmodern\fcharset163\fprq1 Consolas (Vietnamese);}{\f688\fbidi
>\fswiss\fcharset238\fprq2 Verdana CE{\*\falt Verdana};}
>-{\f689\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr{\*\falt
>Verdana};}{\f691\fbidi \fswiss\fcharset161\fprq2 Verdana Greek{\*\falt
>Verdana};}{\f692\fbidi \fswiss\fcharset162\fprq2 Verdana Tur{\*\falt
>Verdana};}
>-{\f695\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic{\*\falt
>Verdana};}{\f696\fbidi \fswiss\fcharset163\fprq2 Verdana
>(Vietnamese){\*\falt Verdana};}{\f1390\fbidi \fnil\fcharset0\fprq2
>@\'cb\'ce\'cc\'e5 Western;}
>-{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman
>CE{\*\falt Times};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times
>New Roman Cyr{\*\falt Times};}
>-{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman
>Greek{\*\falt Times};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2
>Times New Roman Tur{\*\falt Times};}
>-{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman
>(Hebrew){\*\falt Times};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2
>Times New Roman (Arabic){\*\falt Times};}
>-{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman
>Baltic{\*\falt Times};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2
>Times New Roman (Vietnamese){\*\falt Times};}
>-{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt
>SimSun};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria
>CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}
>-{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria
>Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria
>Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}
>-{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria
>(Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New
>Roman CE{\*\falt Times};}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2
>Times New Roman Cyr{\*\falt Times};}
>-{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman
>Greek{\*\falt Times};}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2
>Times New Roman Tur{\*\falt Times};}
>-{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman
>(Hebrew){\*\falt Times};}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2
>Times New Roman (Arabic){\*\falt Times};}
>-{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman
>Baltic{\*\falt Times};}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2
>Times New Roman (Vietnamese){\*\falt Times};}
>-{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman
>CE{\*\falt Times};}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times
>New Roman Cyr{\*\falt Times};}
>-{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman
>Greek{\*\falt Times};}{\flominor\f31552\fbidi \froman\fcharset162\fprq2
>Times New Roman Tur{\*\falt Times};}
>-{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman
>(Hebrew){\*\falt Times};}{\flominor\f31554\fbidi \froman\fcharset178\fprq2
>Times New Roman (Arabic){\*\falt Times};}
>-{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman
>Baltic{\*\falt Times};}{\flominor\f31556\fbidi \froman\fcharset163\fprq2
>Times New Roman (Vietnamese){\*\falt Times};}
>-{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt
>SimSun};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE{\*\falt
>Century Gothic};}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri
>Cyr{\*\falt Century Gothic};}
>-{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek{\*\falt
>Century Gothic};}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri
>Tur{\*\falt Century Gothic};}
>-{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic{\*\falt
>Century Gothic};}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri
>(Vietnamese){\*\falt Century Gothic};}
>-{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman
>CE{\*\falt Times};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times
>New Roman Cyr{\*\falt Times};}
>-{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman
>Greek{\*\falt Times};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2
>Times New Roman Tur{\*\falt Times};}
>-{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman
>(Hebrew){\*\falt Times};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2
>Times New Roman (Arabic){\*\falt Times};}
>-{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman
>Baltic{\*\falt Times};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2
>Times New Roman (Vietnamese){\*\falt
>Times};}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;
>-
>\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\re
>d255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red
>0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\gr
>een0\blue128;\red128\green0\blue0;
>-
>\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue1
>92;\red8\green96\blue168;\red0\green127\blue127;}{\*\defchp
>\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql
>\li0\ri0\sa200\sl276\slmult1
>-
>\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }
>\noqfpromote {\stylesheet{\ql
>\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp103
>3\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\s1\ql
>\li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0
>\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp103
>3\langfenp1033 \sbasedon0 \snext0 \slink15 \sqformat heading 1;}{\s2\ql
>\li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0
>\rtlch\fcs1 \af0\afs24\alang1025
>-\ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp103
>3\langfenp1033 \sbasedon0 \snext0 \slink16 \sqformat heading 2;}{\*\cs10
>\additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
>-
>\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpad
>dfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\
>tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
>-\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
>\rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
>\fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\lan
>gnp1033\langfenp2052 \snext11 \ssemihidden \sunhideused
>-Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0
>\b\fs32\kerning32\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10
>\slink1 \slocked \spriority9 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1
>\ab\ai\af0\afs28 \ltrch\fcs0
>-\b\i\fs28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2
>\slocked Heading 2 Char;}{\s17\ql
>\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af39\afs16\alang1025 \ltrch\fcs0
>-
>\fs16\lang1033\langfe1033\loch\f39\hich\af39\dbch\af31505\cgrid\langnp103
>3\langfenp1033 \sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused
>\styrsid11091224 Balloon Text;}{\*\cs18 \additive \rtlch\fcs1 \af39\afs16
>\ltrch\fcs0 \f39\fs16
>-\sbasedon10 \slink17 \slocked \ssemihidden \styrsid11091224 Balloon Text
>Char;}{\*\cs19 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10
>\ssemihidden \sunhideused \styrsid4072718 annotation reference;}{
>-\s20\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs20\alang1025 \ltrch\fcs0
>\fs20\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp103
>3\langfenp1033
>-\sbasedon0 \snext20 \slink21 \ssemihidden \sunhideused \styrsid4072718
>annotation text;}{\*\cs21 \additive \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \f43\fs20
>\sbasedon10 \slink20 \slocked \ssemihidden \styrsid4072718 Comment Text
>Char;}{
>-\s22\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\ab\af0\afs20\alang1025 \ltrch\fcs0
>\b\fs20\lang1033\langfe1033\loch\f43\hich\af43\dbch\af31505\cgrid\langnp1
>033\langfenp1033
>-\sbasedon20 \snext20 \slink23 \ssemihidden \sunhideused \styrsid4072718
>annotation subject;}{\*\cs23 \additive \rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0
>\b\f43\fs20 \sbasedon21 \slink22 \slocked \ssemihidden \styrsid4072718
>Comment Subject Char;}{
>-\s24\ql \li0\ri20\sb60\sa60\sl-
>200\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin2
>0\lin0\itap0 \rtlch\fcs1 \af0\afs16\alang1025 \ltrch\fcs0
>\fs16\cf1\lang1033\langfe1033\loch\f43\hich\af43\dbch\af13\cgrid\langnp103
>3\langfenp1033
>-\sbasedon0 \snext24 \spriority0 \styrsid12480811 CellBodyLeft;}{\*\cs25
>\additive \b\f2\cf13 \spriority0 \styrsid12480811
>CodeCharacter;}{\*\ts26\tsrowd\trbrdrt\brdrs\brdrw10
>\trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10
>\trbrdrh
>-\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
>\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddf
>r3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsb
>rdrdgr\tsbrdrh\tsbrdrv
>-\ql
>\li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0
>\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
>\fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\lan
>gnp1033\langfenp2052
>-\sbasedon11 \snext26 \spriority59 \styrsid12480811 Table Grid;}}{\*\revtbl
>{Unknown;}{Zhu, Yonghong;}}{\*\rsidtbl
>\rsid351840\rsid2906062\rsid3369612\rsid3607127\rsid4064336\rsid4072718\rsi
>d4999604\rsid5056671\rsid5793818\rsid5911148\rsid7230979\rsid8326873\rsid
>8600807\rsid11091224
>-
>\rsid12198464\rsid12480811\rsid13438422\rsid14880849\rsid15277707\rsid1581
>9932}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdisp
>Def1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim
>1}{\info{\operator Zhu, Yonghong}
>-
>{\creatim\yr2010\mo10\dy6\hr15\min21}{\revtim\yr2016\mo8\dy9\hr10\min
>29}{\version15}{\edmins1040}{\nofpages3}{\nofwords496}{\nofchars2832}{\n
>ofcharsws3322}{\vern57441}}{\*\xmlnstbl {\xmlns1
>http://schemas.microsoft.com/office/word/2003/wordml}}
>-
>\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gu
>tter0\ltrsect
>-
>\deftab360\widowctrl\ftnbj\aenddoc\revisions\trackmoves0\trackformatting
>1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\va
>lidatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\show
>xmlerrors0\horzdoc\dghspace120\dgvspace120
>-
>\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\vi
>ewscale100\rsidroot13438422 \fet0{\*\wgrffmtfilter
>2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj
>{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang
>-{\pntxta \hich .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang
>{\pntxta \hich .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta
>\hich .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta
>\hich )}}{\*\pnseclvl5
>-\pndec\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta
>\hich )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich
>(}{\pntxta \hich )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang
>{\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl8
>-\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta
>\hich )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich
>(}{\pntxta \hich )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0
>-\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-
>1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>-\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Name
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>GenVtf.exe - generate the Boot Strap File (AKA Volume Top File, or VTF) for
>IPF images
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Synopsis
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs18
>-\ltrch\fcs0 \b\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>GenVtf.exe [}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid5056671
>\hich\af43\dbch\af31505\loch\f43 -v | -q | -d}{\rtlch\fcs1
>-\ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid3607127
>\hich\af43\dbch\af31505\loch\f43 ]}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid5056671
>\hich\af43\dbch\af31505\loch\f43
>- }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062
>\hich\af43\dbch\af31505\loch\f43 [-o }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid15819932
>-\hich\af43\dbch\af31505\loch\f43 <}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062
>\hich\af43\dbch\af31505\loch\f43 OutputFile}{\rtlch\fcs1 \ab\af43\afs18
>\ltrch\fcs0
>-\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid15819932
>\hich\af43\dbch\af31505\loch\f43 >}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062
>\hich\af43\dbch\af31505\loch\f43 ] \hich\f43 \endash
>-\hich\af43\dbch\af31505\loch\f43 f <FileName> -r <BaseAddr> -s
><Size>}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid7230979
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0
>\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062
>\hich\af43\dbch\af31505\loch\f43 GenVtf.exe \hich\f43 \endash \loch\f43 h
>-\par \hich\af43\dbch\af31505\loch\f43 GenVtf.exe --version}{\rtlch\fcs1
>\af0\afs18 \ltrch\fcs0
>\f0\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid2906062\charrsid35184
>0
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Description
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>GenVtf }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 generates}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0 \fs18\cf1\insrsid7230979
>-\hich\af43\dbch\af31505\loch\f43 the Boot Strap File (AKA Volume Top File,
>or VTF) for IPF images. This utility }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43
>parses}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 the input BSF inf
>file and get}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 s}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid7230979
>-\hich\af43\dbch\af31505\loch\f43 the component information. If all
>the\hich\af43\dbch\af31505\loch\f43 }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 required
>components are in a single }{\rtlch\fcs1
>-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 VTF file, then only one VTF Base Address
>and Size }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 is}{\rtlch\fcs1
>-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 needed and only one raw data output file
>and one symbol output file }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 (}{
>-\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 which is the symbol of raw data}{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 ) is needed}{\rtlch\fcs1
>-\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 . If there}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is a }{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 component
>required }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 for the}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid7230979
>-\hich\af43\dbch\af31505\loch\f43 the second
>V\hich\af43\dbch\af31505\loch\f43 TF file but there}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0 \fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43
>is}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 no second VTF
>Base Address and Size specified in }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 the }{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 command line
>interface, then this utility will exit with }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 a }{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 related error
>message; if there}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43 is a }{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>-\hich\af43\dbch\af31505\loch\f43 second VTF Base Address and Size
>specified, then two raw data output files and one
>sym\hich\af43\dbch\af31505\loch\f43 bol output file}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0 \fs18\cf1\insrsid14880849
>-\hich\af43\dbch\af31505\loch\f43 will be created}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0 \fs18\cf1\insrsid7230979 .
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>Options}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
>-\b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid3369612\charrsid12198464
>\hich\af43\dbch\af31505\loch\f43 If no options ar}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0 \fs18\cf1\insrsid3369612 \hich\af43\dbch\af31505\loch\f43 e
>specified, tool prints usage.}{\rtlch\fcs1
>-\ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid4072718
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -f, --filename BS_INFFile
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Name of the BS Image INF file to use
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -r, --baseaddr hexaddress
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 The Base Address is the starting address
>of the Firmware Volume wh\hich\af43\dbch\af31505\loch\f43 ere the Boot
>Strapped Image will reside
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -s, --size Size
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 The size of the Firmware Volume
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -o, --output Filename
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 VTF Filename that will be created
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 --version
>-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
>\tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Print version and copyright of this program
>and exit
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -v, --verbose
>-\par }\pard \ltrpar\ql
>\li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0
>{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Turn on verbose
>outpu\hich\af43\dbch\af31505\loch\f43
>-t with informational messages printed. This is a count value, so specifying
>\hich\f43 \endash \loch\f43 vv can be used to increase the verbosity level.
>-\par }\pard \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1
>\ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -q, --quiet
>-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
>\tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Disable all messages except FATAL ERRORS
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -d, --debug [#]
>-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
>\tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Enable debug messages, at level #
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 -h, --help
>-\par }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
>\tab }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Print copyright, version and usage of this
>program and exit
>-\par }\pard\plain \ltrpar\s2\ql \fi-1440\li0\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\tx0\tx1440\wrapdefault\faauto\outlin
>elevel1\rin0\lin0\itap0\pararsid12480811 \rtlch\fcs1 \af0\afs24\alang1025
>\ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid12480811\charrsid3607127 {\*\bkmkstart
>OLE_LINK7}{\*\bkmkstart OLE_LINK8}\hich\af43\dbch\af31505\loch\f43
>-Status codes returned
>-\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts26\trleft-
>108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10
>\trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
>-
>\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108
>\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdr
>rows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3
>\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
>-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>\cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark
>\cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
>\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark
>\cellx8712\pard\plain \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-
>200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustrigh
>t\rin20\lin0\pararsid5911148\yts26 \rtlch\fcs1
>-\af0\afs16\alang1025 \ltrch\fcs0
>\fs16\cf1\lang1033\langfe1033\loch\af43\hich\af43\dbch\af13\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0
>-
>\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid124
>80811\charrsid8600807 \hich\af2\dbch\af13\loch\f2
>STATUS_SUCCESS}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811
>\hich\af43\dbch\af13\loch\f43 }{\rtlch\fcs1 \ab\af2\afs18
>-\ltrch\fcs0
>\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid124
>80811\charrsid4999604 \tab }{\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0
>\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid124
>80811 0}{\rtlch\fcs1
>-\ab\af2\afs18 \ltrch\fcs0
>\cs25\b\f2\fs18\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811
>\cell }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811
>\hich\af43\dbch\af13\loch\f43 The action was completed as
>requested.}{\rtlch\fcs1 \af0 \ltrch\fcs0
>-\kerning2\insrsid12480811 \cell }\pard\plain \ltrpar\ql
>\li0\ri0\sa200\sl276\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\fa
>auto\adjustright\rin0\lin0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \fs20\insrsid12480811
>\trowd \irow0\irowband0\ltrrow\ts26\trleft-108\trbrdrt\brdrs\brdrw10
>\trbrdrl\brdrs\brdrw10 \trbrdrb
>-\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
>\trbrdrv\brdrs\brdrw10
>-
>\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108
>\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdr
>rows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3
>\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
>-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>\cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark
>\cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
>\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark \cellx8712\row
>\ltrrow}\pard\plain \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-
>200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustrigh
>t\rin20\lin0\pararsid5911148\yts26 \rtlch\fcs1
>-\af0\afs16\alang1025 \ltrch\fcs0
>\fs16\cf1\lang1033\langfe1033\loch\af43\hich\af43\dbch\af13\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0
>\cs25\b\f2\fs18\cf13\kerning2\insrsid12480811\charrsid8600807
>\hich\af2\dbch\af13\loch\f2
>-STATUS_ERROR}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12480811
>\hich\af43\dbch\af13\loch\f43 }{\rtlch\fcs1 \ab\af2\afs18 \ltrch\fcs0
>\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid124
>80811\charrsid4999604 \tab \tab }{\rtlch\fcs1
>-\ab\af2\afs18 \ltrch\fcs0
>\cs25\b\f2\fs18\cf13\lang1033\langfe2052\kerning2\langfenp2052\insrsid124
>80811 \hich\af2\dbch\af13\loch\f2 2}{\rtlch\fcs1 \af41\afs19 \ltrch\fcs0
>-
>\cs25\f41\fs19\cf0\lang1033\langfe2052\langfenp2052\insrsid12480811\charrs
>id8600807 \cell }\pard \ltrpar\s24\ql \li0\ri20\sb60\sa60\sl-
>200\slmult0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustrigh
>t\rin20\lin0\pararsid15277707\yts26 {
>-\rtlch\fcs1 \af0 \ltrch\fcs0
>\lang1033\langfe2052\kerning2\langfenp2052\insrsid12480811
>\hich\af43\dbch\af13\loch\f43 The action failed.\cell }\pard\plain \ltrpar\ql
>\li0\ri0\sa200\sl276\slmult1
>-\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0
>\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0
>-\fs20\insrsid12480811 \trowd \irow1\irowband1\lastrow \ltrrow\ts26\trleft-
>108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10
>\trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
>-
>\trftsWidth3\trwWidth8820\trftsWidthB3\trftsWidthA3\trautofit1\trpaddl108
>\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid5911148\tbllkhdr
>rows\tbllkhdrcols\tbllknocolband\tblind0\tblindtype3
>\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
>-\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>\cltxlrtb\clftsWidth3\clwWidth2970\clshdrawnil\clhidemark
>\cellx2862\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
>\clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
>-\cltxlrtb\clftsWidth3\clwWidth5850\clshdrawnil\clhidemark
>\cellx8712\row }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025
>-\ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 {\*\bkmkend OLE_LINK7}{\*\bkmkend
>OLE_LINK8}\hich\af43\dbch\af31505\loch\f43 Example}{
>-\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>Generate one VTF file with inf file name, base address and size specified in
>command line and without output filename specified. }{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0
>-\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43
>Default}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 \hich\f43 filename \'93\loch\f43 \hich\f43
>VTF1.RAW\'94\loch\f43 will be used.
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 f
>bsf.inf \hich\f43 \endash \loch\f43 r 0xFFE00000 \hich\f43 \endash \loch\f43 s
>0x200000
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Generate two VTF files with inf file
>name\hich\af43\dbch\af31505\loch\f43
>-, base address and size specified in command line and without output
>filename specified. }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid14880849 \hich\af43\dbch\af31505\loch\f43
>Default}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 \hich\f43
>filename \'93\loch\f43 \hich\f43 VTF1.RAW\'94\loch\f43 \hich\f43 and
>\'93\loch\f43 \hich\f43 VTF2.RAW\'94\loch\f43 will be used.
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 f
>bsf.inf \hich\f43 \endash \loch\f43 r 0xFFE00000 \hich\f43 \endash \loch\f43 s
>0x200000 \hich\f43 \endash \loch\f43
>-r 0xFFD00000 \hich\f43 \endash \loch\f43 s 0x100000
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Generate one VTF file with inf file
>name,\hich\af43\dbch\af31505\loch\f43 base address and size specified in
>command line and output filename specified.
>-
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 o
>file.tmp \hich\f43 \endash \loch\f43 f bsf.inf \hich\f43 \endash \loch\f43 r
>0xFFE00000 \hich\f43 \endash \loch\f43
>-s 0x200000
>-\par }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 Generate two VTF files with inf file name,
>base address and size specified in command line and output filename
>specified.
>-\par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 GenVtf \hich\f43 \endash \loch\f43 o
>file1.tmp \hich\f43 \endash \loch\f43 o file2.tmp \hich\f43 \endash \loch\f43 f
>bsf.inf \hich\f43 \endash \loch\f43
>-r 0xFFE00000 \hich\f43 \endash \loch\f43 s 0x200000 \hich\f43 \endash
>\loch\f43 r 0xFFD00000 \hich\f43 \endash \loch\f43 s 0x100000
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>Bugs}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
>-\b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 No
>known bugs.
>-\par \hich\af43\dbch\af31505\loch\f43 Report bugs to }{\rtlch\fcs1
>\af43\afs18 \ltrch\fcs0
>\fs18\cf1\revised\revauth1\revdttm1195920029\insrsid4064336\charrsid14420
>013 \hich\af43\dbch\af31505\loch\f43 edk2-
>\hich\af43\dbch\af31505\loch\f43 devel
>-\hich\af43\dbch\af31505\loch\f43
>@lists.01.\hich\af43\dbch\af31505\loch\f43 org}{\rtlch\fcs1 \af43\afs18
>\ltrch\fcs0
>\deleted\fs18\cf1\revauthdel1\revdttmdel1195920029\insrsid7230979\delrsid
>4064336 \hich\af43\dbch\af31505\loch\f43 edk
>-\hich\af43\dbch\af31505\loch\f43 2-buildtools-
>devel@lists.sourceforge.net}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
>\f0\fs18\cf1\insrsid7230979
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>Files}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
>-\b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 None
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>See}{\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>-\b\fs28\cf18\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 }{\rtlch\fcs1
>\ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979
>\hich\af43\dbch\af31505\loch\f43 also}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
>\b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18
>-\ltrch\fcs0 \fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 None
>-\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-
>340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0
>\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0
>-
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \ab\af43\afs28 \ltrch\fcs0
>\b\fs28\cf17\insrsid7230979 \hich\af43\dbch\af31505\loch\f43
>License}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0
>-\b\f0\fs28\cf18\insrsid7230979
>-\par }\pard\plain \ltrpar\ql
>\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
>\af0\afs24\alang1025 \ltrch\fcs0
>\fs24\lang1033\langfe1033\loch\af43\hich\af43\dbch\af31505\cgrid\langnp10
>33\langfenp1033 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>-\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 Copyright (c)
>1999 - }{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14880849
>\hich\af43\dbch\af31505\loch\f43 201}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>-\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid351840
>\hich\af43\dbch\af31505\loch\f43 1}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0
>\fs18\cf1\insrsid7230979 \hich\af43\dbch\af31505\loch\f43 , Intel Corporation.
>All rights reserved.
>-\par \hich\af43\dbch\af31505\loch\f43 This program and the accompanying
>materials
>-\par \hich\af43\dbch\af31505\loch\f43 are licensed and made available
>under the terms and conditions of the BSD License
>-\par \hich\af43\dbch\af31505\loch\f43 which accompanies this distribution.
>The full text of the license may be found at
>-\par \hich\af43\dbch\af31505\loch\f43 http://opensource.org/licenses/bsd-
>license.php\tab
>-\par
>-\par \hich\af43\dbch\af31505\loch\f43 THE PROGRAM IS DISTRIBUTED
>UNDER THE BSD L\hich\af43\dbch\af31505\loch\f43 ICENSE ON AN "AS IS"
>BASIS,
>-\par \hich\af43\dbch\af31505\loch\f43 WITHOUT WARRANTIES OR
>REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>-\par }\pard \ltrpar\ql
>\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1
>\af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid7230979
>-\par }{\*\themedata
>504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e
>74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
>-
>9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd9
>33f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
>-
>5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f
>90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
>-
>b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ec
>ab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
>-
>0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53f
>e813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
>-
>a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef8
>5bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
>-
>c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f
>82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
>-
>0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f5
>1652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
>-
>a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b03041400060008
>00000021006b799616830000008a0000001c0000007468656d652f746865
>-
>6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93
>763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
>-
>4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b4
>8d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
>-
>4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000
>210096b5ade296060000501b0000160000007468656d652f7468656d652f
>-
>7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b
>2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87
>-
>615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e
>1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad
>-
>79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944a
>d79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b
>-
>5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a0491367
>85c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab
>-
>999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71ba
>d2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9
>-
>699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5
>da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586
>-
>8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24b
>b318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6
>-
>0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70
>f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f
>-
>9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdf
>dbb4715f04d814765f890c644a29be408edf3181433567125272371be
>-
>15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a3
>0a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979
>-
>3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e
>140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d
>-
>32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2
>a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a
>-
>f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc
>81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86
>-
>e877f0034e16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e
>4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb
>-
>44f95d843b5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d
>94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a
>-
>6409fb44d08741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845
>368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c
>-
>3d9058edf2c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd
>76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db0256
>-
>5e85f3b9660d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9
>c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276
>-
>b9f7dec44b7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc3991
>61ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8
>-
>c33585b5fb9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023
>fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e
>-
>51440ca2e0088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29
>c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95
>-
>b21be5ceaf8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0
>b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff
>-
>6dce591a26ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b926584
>4c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec6
>-
>9ffb9e65d028d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f4
>4acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239
>-
>b75a5bb1e6345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa
>843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a449
>-
>59d366ad93b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b347
>66661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e8
>-
>2db8df9f30254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0
>304140006000800000021000dd1909fb60000001b010000270000007468
>-
>656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72
>656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4
>-
>350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae9
>95719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d2624
>-
>52282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da
>0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe5141
>-
>73d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d00140
>00600080000002100e9de0fbfff0000001c020000130000000000000000
>-
>0000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0
>014000600080000002100a5d6a7e7c0000000360100000b00000000000000
>-
>000000000000300100005f72656c732f2e72656c73504b01022d0014000600080000
>0021006b799616830000008a0000001c0000000000000000000000000019
>-
>0200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b0
>1022d001400060008000000210096b5ade296060000501b00001600000000
>-
>000000000000000000d60200007468656d652f7468656d652f7468656d65312e786
>d6c504b01022d00140006000800000021000dd1909fb60000001b01000027
>-
>00000000000000000000000000a00900007468656d652f7468656d652f5f72656c73
>2f7468656d654d616e616765722e786d6c2e72656c73504b0506000000000500050
>05d0100009b0a00000000}
>-{\*\colorschememapping
>3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d
>3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
>-
>617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c
>666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
>-
>6e22206267313d226c743122207478313d22646b3122206267323d226c743222207
>478323d22646b322220616363656e74313d22616363656e74312220616363
>-
>656e74323d22616363656e74322220616363656e74333d22616363656e743322206
>16363656e74343d22616363656e74342220616363656e74353d22616363656e7435
>2220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b222
>0666f6c486c696e6b3d22666f6c486c696e6b222f3e}
>-
>{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideus
>eddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1
>\lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading
>1;\lsdqformat1 \lsdlocked0 heading 2;
>-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0
>heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9
>\lsdlocked0 heading 4;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1
>\lsdpriority9 \lsdlocked0 heading 5;
>-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0
>heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9
>\lsdlocked0 heading 7;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1
>\lsdpriority9 \lsdlocked0 heading 8;
>-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0
>heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;
>-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;
>-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;
>-\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc
>9;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0
>caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List
>Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;
>-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdqformat1
>\lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1
>\lsdlocked0 Default Paragraph Font;\lsdqformat1 \lsdpriority11 \lsdlocked0
>Subtitle;
>-\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1
>\lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1
>\lsdlocked0 Body Text First Indent;\lsdqformat1 \lsdpriority22 \lsdlocked0
>Strong;
>-\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdpriority59 \lsdlocked0
>Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1
>\lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;
>-\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light
>Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0
>Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66
>\lsdlocked0 Medium List 2;
>-\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium
>Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0
>Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0
>Colorful List;
>-\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light
>Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62
>\lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1
>Accent 1;
>-\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65
>\lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0
>Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1
>\lsdpriority29 \lsdlocked0 Quote;
>-\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66
>\lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1
>Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69
>\lsdlocked0 Medium Grid 3 Accent 1;
>-\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0
>Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent
>1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0
>Light Shading Accent 2;
>-\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light
>Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent
>2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65
>\lsdlocked0 Medium List 1 Accent 2;
>-\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0
>Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent
>2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0
>Dark List Accent 2;
>-\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0
>Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent
>2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0
>Light List Accent 3;
>-\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0
>Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2
>Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66
>\lsdlocked0 Medium List 2 Accent 3;
>-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0
>Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent
>3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0
>Colorful Shading Accent 3;
>-\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0
>Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent
>4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light
>Grid Accent 4;
>-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64
>\lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium
>List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
>-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0
>Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent
>4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0
>Colorful Shading Accent 4;
>-\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0
>Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent
>5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light
>Grid Accent 5;
>-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64
>\lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium
>List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
>-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0
>Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent
>5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0
>Colorful Shading Accent 5;
>-\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0
>Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent
>6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light
>Grid Accent 6;
>-\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64
>\lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium
>List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
>-\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0
>Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent
>6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0
>Colorful Shading Accent 6;
>-\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0
>Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle
>Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
>-\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1
>\lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33
>\lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37
>\lsdlocked0 Bibliography;
>-\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0
>TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0
>Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0
>Plain Table 4;
>-\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table
>Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0
>Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0
>Grid Table 4;
>-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid
>Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46
>\lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2
>Accent 1;
>-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid
>Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent
>1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
>-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46
>\lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2
>Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
>-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid
>Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent
>2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
>-\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47
>\lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3
>Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
>-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51
>\lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table
>7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
>-\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid
>Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50
>\lsdlocked0 Grid Table 5 Dark Accent 4;
>-\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52
>\lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table
>1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
>-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid
>Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent
>5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
>-\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46
>\lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2
>Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
>-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid
>Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent
>6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
>-\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List
>Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List
>Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
>-\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List
>Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent
>1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List
>Table 3 Accent 1;
>-\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List
>Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent
>1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
>-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0
>List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent
>2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
>-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0
>List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful
>Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
>-\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List
>Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50
>\lsdlocked0 List Table 5 Dark Accent 3;
>-\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52
>\lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1
>Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
>-\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List
>Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent
>4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
>-\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46
>\lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2
>Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
>-\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List
>Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent
>5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
>-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0
>List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent
>6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
>-\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0
>List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful
>Accent 6;}}{\*\datastore 010500000200000018000000
>-
>4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000000
>60000
>-
>d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff09000600
>0000000000000000000001000000010000000000000000100000feffffff00000000fe
>ffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
>-
>ffffffffffffffffffffffffffffffff52006f006f007400200045006e0074007200790000000
>00000000000000000000000000000000000000000000000000000000000000000000
>00000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f00409632
>51e50000000000000000000000007075
>-
>46d3e5f1d101feffffff0000000000000000000000000000000000000000000000000
>00000000000000000000000000000000000000000000000000000000000000000000
>00000000000000000000000000000000000ffffffffffffffffffffffff000000000000000
>00000000000000000000000000000000000000000
>-
>00000000000000000000000000000000000000000000000000000000000000000000
>00000000000000000000000000000000000000000000000000000000000000000000
>0000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000
>000000000000000000000000000000000000000000
>-
>00000000000000000000000000000000000000000000000000000000000000000000
>00000000000000000000000000000000000000000000000000000000000000000000
>00000000000000000000000000000000000000000000ffffffffffffffffffffffff000000
>000000000000000000000000000000000000000000
>-0000000000000000000000000000000000000000000000000105000000000000}}
>\ No newline at end of file
>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] 2+ messages in thread
end of thread, other threads:[~2018-12-05 0:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-03 1:58 [PATCH v3] BaseTools: Remove GenVtf Shenglei Zhang
2018-12-05 0:07 ` Gao, Liming
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox