From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 399AA2118F79B for ; Tue, 4 Dec 2018 16:08:16 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Dec 2018 16:08:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,316,1539673200"; d="scan'208";a="127138144" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga001.fm.intel.com with ESMTP; 04 Dec 2018 16:08:15 -0800 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 4 Dec 2018 16:08:14 -0800 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 4 Dec 2018 16:08:13 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.203]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.46]) with mapi id 14.03.0415.000; Wed, 5 Dec 2018 08:07:45 +0800 From: "Gao, Liming" To: "Zhang, Shenglei" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH v3] BaseTools: Remove GenVtf Thread-Index: AQHUiqvQLqQ0eQf6OUy0JrBpPQUjH6VvR7NA Date: Wed, 5 Dec 2018 00:07:44 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E383BD7@SHSMSX104.ccr.corp.intel.com> References: <20181203015857.16404-1-shenglei.zhang@intel.com> In-Reply-To: <20181203015857.16404-1-shenglei.zhang@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3] BaseTools: Remove GenVtf X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Dec 2018 00:08:16 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao >-----Original Message----- >From: Zhang, Shenglei >Sent: Monday, December 03, 2018 9:59 AM >To: edk2-devel@lists.01.org >Cc: Zhu, Yonghong ; Gao, Liming > >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=3D1349 > >v2:Remove GenVtf in Makefile and GNUmakefile. > >v3:Remove BinWrappers/PosixLike/GenVtf and the user manual > of GenVtf. > >Cc: Yonghong Zhu >Cc: Liming Gao >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Shenglei Zhang >--- > 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=3D${BASH_SOURCE:-$0} # see >http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a >good choice here >-dir=3D$(dirname "$full_cmd") >-cmd=3D${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 =3D \ > 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.
>-# This program and the accompanying materials >-# are licensed and made available under the terms and conditions of the B= SD >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 ?=3D .. >- >-APPNAME =3D GenVtf >- >-LIBS =3D -lCommon >- >-OBJECTS =3D 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.
>-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 >-#include >-#include "GenVtf.h" >-#include >-#include "CommonLib.h" >-#include "EfiUtilityMsgs.h" >- >-// >-// Global variables >-// >-UINTN SectionOptionFlag =3D 0; >-UINTN SectionCompFlag =3D 0; >- >-UINT64 DebugLevel; >-BOOLEAN DebugMode; >- >-BOOLEAN QuietMode =3D FALSE; >- >-BOOLEAN VTF_OUTPUT =3D 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 =3D 0; >-UINTN ValidFFDFileListNum =3D 0; >- >-// >-// Section Description and their number of occurences in *.INF file >-// >-UINTN NumFvFiles =3D 0; >-UINTN SectionOptionNum =3D 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 =3D FALSE; >-BOOLEAN SecondVTF =3D FALSE; >- >-// >-// Address related information >-// >-UINT64 Fv1BaseAddress =3D 0; >-UINT64 Fv2BaseAddress =3D 0; >-UINT64 Fv1EndAddress =3D 0; >-UINT64 Fv2EndAddress =3D 0; >-UINT32 Vtf1TotalSize =3D SIZE_TO_OFFSET_PAL_A_END; >-UINT64 Vtf1LastStartAddress =3D 0; >-UINT32 Vtf2TotalSize =3D 0; >-UINT64 Vtf2LastStartAddress =3D 0; >- >-UINT32 BufferToTop =3D 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] =3D "0000"; >- int Major; >- int Minor; >- UINTN Length; >- >- Major =3D 0; >- Minor =3D 0; >- >- if (strstr (Str, ".") !=3D NULL) { >- sscanf ( >- Str, >- "%02x.%02x", >- &Major, >- &Minor >- ); >- } else { >- Length =3D 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 =3D (UINT8) Major; >- *MinorVer =3D (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 =3D strchr (Line, '#')) !=3D NULL) || ((Ptr0 =3D strstr (Lin= e, "//")) !=3D NULL)) { >- Line[Ptr0 - Line] =3D 0; >- } >- >- // >- // Initialize counters >- // >- Index =3D 0; >- Index2 =3D 0; >- >- while ((Char =3D Line[Index]) !=3D 0) { >- if ((Char !=3D ' ') && (Char !=3D '\t') && (Char !=3D '\n') && (Char = !=3D '\r')) { >- TmpLine[Index2++] =3D Char; >- } >- Index++; >- } >- >- TmpLine[Index2] =3D 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] =3D=3D 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[] =3D "=3D"; >- >- Buff [FILE_NAME_SIZE] =3D '\0'; >- Token =3D NULL; >- >- while (fgets (Buff, FILE_NAME_SIZE, Fp) !=3D NULL) { >- TrimLine (Buff); >- if (Buff[0] =3D=3D 0) { >- continue; >- } >- Token =3D strtok (Buff, Delimit); >- while (Token !=3D NULL) { >- strcpy (*TokenStr, Token); >- TokenStr ++; >- Token =3D 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 initi= alizes >- the VTF symbol file. >- >-Arguments: >- >- None >- >-Returns: >- >- EFI_SUCCESS - The function completed successfully >- EFI_OUT_OF_RESOURCES - Malloc failed. >- >---*/ >-{ >- >- FileListPtr =3D malloc (sizeof (PARSED_VTF_INFO)); >- >- if (FileListPtr =3D=3D NULL) { >- return EFI_OUT_OF_RESOURCES; >- } >- >- FileListHeadPtr =3D FileListPtr; >- memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO)); >- FileListPtr->NextVtfInfo =3D 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 !=3D NULL && (strnicmp (*TokenStr, "COMP_NAME", 9) != =3D 0)) >{ >- >- if (strnicmp (*TokenStr, "COMP_LOC", 8) =3D=3D 0) { >- TokenStr++; >- if (strnicmp (*TokenStr, "F", 1) =3D=3D 0) { >- VtfInfo->LocationType =3D FIRST_VTF; >- } else if (strnicmp (*TokenStr, "S", 1) =3D=3D 0) { >- VtfInfo->LocationType =3D SECOND_VTF; >- } else { >- VtfInfo->LocationType =3D NONE; >- } >- } else if (strnicmp (*TokenStr, "COMP_TYPE", 9) =3D=3D 0) { >- TokenStr++; >- if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) !=3D EFI_S= UCCESS) { >- Error (NULL, 0, 5001, "Cannot get: \"0x%s\".", *TokenStr); >- return ; >- } >- >- VtfInfo->CompType =3D (UINT8) StringValue; >- } else if (strnicmp (*TokenStr, "COMP_VER", 8) =3D=3D 0) { >- TokenStr++; >- if (strnicmp (*TokenStr, "-", 1) =3D=3D 0) { >- VtfInfo->VersionPresent =3D FALSE; >- VtfInfo->MajorVer =3D 0; >- VtfInfo->MinorVer =3D 0; >- } else { >- VtfInfo->VersionPresent =3D TRUE; >- ConvertVersionInfo (*TokenStr, &VtfInfo->MajorVer, &VtfInfo- >>MinorVer); >- } >- } else if (strnicmp (*TokenStr, "COMP_BIN", 8) =3D=3D 0) { >- TokenStr++; >- if (strlen (*TokenStr) >=3D 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] =3D 0; >- } else if (strnicmp (*TokenStr, "COMP_SYM", 8) =3D=3D 0) { >- TokenStr++; >- if (strlen (*TokenStr) >=3D 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] =3D 0; >- } else if (strnicmp (*TokenStr, "COMP_SIZE", 9) =3D=3D 0) { >- TokenStr++; >- if (strnicmp (*TokenStr, "-", 1) =3D=3D 0) { >- VtfInfo->PreferredSize =3D FALSE; >- VtfInfo->CompSize =3D 0; >- } else { >- VtfInfo->PreferredSize =3D TRUE; >- if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) !=3D EFI= _SUCCESS) >{ >- Error (NULL, 0, 5001, "Parse error", "Cannot get: %s.", TokenSt= r); >- return ; >- } >- >- VtfInfo->CompSize =3D (UINTN) StringValue; >- } >- >- } else if (strnicmp (*TokenStr, "COMP_CS", 7) =3D=3D 0) { >- TokenStr++; >- if (strnicmp (*TokenStr, "1", 1) =3D=3D 0) { >- VtfInfo->CheckSumRequired =3D 1; >- } else if (strnicmp (*TokenStr, "0", 1) =3D=3D 0) { >- VtfInfo->CheckSumRequired =3D 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 =3D=3D 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 =3D 0; >- SectionCompFlag =3D 0; >- TokenStr =3D OrgStrTokPtr; >- >- while (*TokenStr !=3D NULL) { >- if (strnicmp (*TokenStr, "[OPTIONS]", 9) =3D=3D 0) { >- SectionOptionFlag =3D 1; >- SectionCompFlag =3D 0; >- } >- >- if (strnicmp (*TokenStr, "[COMPONENTS]", 12) =3D=3D 0) { >- if (FileListPtr =3D=3D NULL) { >- FileListPtr =3D FileListHeadPtr; >- } >- >- SectionCompFlag =3D 1; >- SectionOptionFlag =3D 0; >- TokenStr++; >- } >- >- if (SectionOptionFlag) { >- if (stricmp (*TokenStr, "IA32_RST_BIN") =3D=3D 0) { >- TokenStr++; >- if (strlen (*TokenStr) >=3D FILE_NAME_SIZE) { >- Error (NULL, 0, 3000, "Invalid", "The 'IA32_RST_BIN' name is to= o long."); >- break; >- } >- strncpy (IA32BinFile, *TokenStr, FILE_NAME_SIZE - 1); >- IA32BinFile[FILE_NAME_SIZE - 1] =3D 0; >- } >- } >- >- if (SectionCompFlag) { >- if (stricmp (*TokenStr, "COMP_NAME") =3D=3D 0) { >- TokenStr++; >- if (strlen (*TokenStr) >=3D COMPONENT_NAME_SIZE) { >- Error (NULL, 0, 3000, "Invalid", "The 'COMP_NAME' name is too l= ong."); >- break; >- } >- strncpy (FileListPtr->CompName, *TokenStr, COMPONENT_NAME_SIZE - >1); >- FileListPtr->CompName[COMPONENT_NAME_SIZE - 1] =3D 0; >- TokenStr++; >- ParseAndUpdateComponents (FileListPtr); >- } >- >- if (*TokenStr !=3D NULL) { >- FileListPtr->NextVtfInfo =3D malloc (sizeof (PARSED_VTF_INFO)); >- if (FileListPtr->NextVtfInfo =3D=3D NULL) { >- Error (NULL, 0, 4003, "Resource", "Out of memory resources.", N= ULL); >- break; >- } >- FileListPtr =3D FileListPtr->NextVtfInfo; >- memset (FileListPtr, 0, sizeof (PARSED_VTF_INFO)); >- FileListPtr->NextVtfInfo =3D 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 token= s >- 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 =3D EFI_SUCCESS; >- Fp =3D FilePointer; >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 2000, "Invalid parameter", "BSF INF file is invalid!"= ); >- return EFI_ABORTED; >- } >- >- ValidLineCount (Fp); >- >- if (ValidLineNum =3D=3D 0) { >- Error (NULL, 0, 2000, "Invalid parameter", "File does not contain any= valid >information!"); >- return EFI_INVALID_PARAMETER; >- } >- >- TokenStr =3D (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum + 1)= ); >- >- if (TokenStr =3D=3D NULL) { >- return EFI_OUT_OF_RESOURCES; >- } >- >- memset (TokenStr, 0, (sizeof (UINTN) * (2 * ValidLineNum + 1))); >- OrgStrTokPtr =3D TokenStr; >- >- for (Index =3D 0; Index < (2 * ValidLineNum); Index++) { >- *TokenStr =3D (CHAR8*)malloc (sizeof (CHAR8) * FILE_NAME_SIZE); >- >- if (*TokenStr =3D=3D NULL) { >- Status =3D EFI_OUT_OF_RESOURCES; >- goto ParseFileError; >- } >- >- memset (*TokenStr, 0, FILE_NAME_SIZE); >- TokenStr++; >- } >- >- TokenStr =3D OrgStrTokPtr; >- fseek (Fp, 0L, SEEK_SET); >- >- Status =3D InitializeComps (); >- >- if (Status !=3D EFI_SUCCESS) { >- goto ParseFileError; >- } >- >- Status =3D ParseInputFile (Fp); >- if (Status !=3D EFI_SUCCESS) { >- goto ParseFileError; >- } >- >- InitializeInFileInfo (); >- >-ParseFileError: >- >- for (Index1 =3D 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 bound= ary. >In >- case the address is not aligned, it returns FALSE and the amount of dat= a in >- terms of byte needed to adjust to get the boundary alignmnet. If data i= s >- 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 =3D=3D FIRST_VTF) { >- LocalBuff =3D (UINT8 *) Vtf1EndBuffer; >- TempAddress =3D Fv1EndAddress - Address; >- *RelativeAddress =3D (UINTN) LocalBuff - (UINTN) TempAddress; >- } else { >- LocalBuff =3D (UINT8 *) Vtf2EndBuffer; >- TempAddress =3D Fv2EndAddress - Address; >- *RelativeAddress =3D (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 =3D (UINT8) ((VersionInfo & 0xFF00) >> 8); >- VtfInfo->MinorVer =3D (UINT8) (VersionInfo & 0x00FF); >- Status =3D EFI_SUCCESS; >- break; >- >- default: >- Status =3D 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 bound= ary. >In >- case the address is not aligned, it returns FALSE and the amount of dat= a in >- terms of byte needed to adjust to get the boundary alignmnet. If data i= s >- aligned, TRUE will be returned. >- >-Arguments: >- >- Address - Pointer to buffer containing byte data of compon= ent. >- 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 boundar= y >- FALSE - Address in not aligned to specified data size bo= undary >- - Add/Subtract AlignAdjustByte to aling the addres= s. >- >---*/ >-{ >- // >- // Check if the assigned address is on address boundary. If not, it wil= l >- // return the remaining byte required to adjust the address for specifi= ed >- // address boundary >- // >- *AlignAdjustByte =3D (Address % AlignmentData); >- >- if (*AlignAdjustByte =3D=3D 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 =3D Fv1EndAddress - (SIZE_IA32_RESET_VECT + >SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD); >- >- // >- // Translate this Itanium-based address in terms of local buffer addres= s >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 =3D *(UINTN *) RelativeAddress; >- >- // >- // The FitTableAdd is the extracted Itanium based address pointing to F= IT >- // table. The relative address will return its actual location in VTF >- // Buffer. >- // >- GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF= ); >- >- *FitTable =3D (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 usi= ng >- 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 compon= ents. >- 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 a= dded >- >-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 =3D Fv1EndAddress - (SIZE_IA32_RESET_VECT + >SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD); >- >- // >- // Translate this Itanium-based address in terms of local buffer addres= s >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 =3D *(UINTN *) RelativeAddress; >- >- // >- // The FitTableAdd is the extracted Itanium based address pointing to F= IT >- // table. The relative address will return its actual location in VTF >- // Buffer. >- // >- GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF= ); >- >- TmpFitPtr =3D (FIT_TABLE *) RelativeAddress; >- NumFitComponents =3D TmpFitPtr->CompSize; >- *FitPtr =3D NULL; >- >- for (Index =3D 0; Index < NumFitComponents; Index++) { >- if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) =3D=3D >COMP_TYPE_FIT_UNUSED) { >- *FitPtr =3D 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 Compo= nent >- 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 Compo= nent >- Type in their incresing order. >- >-Arguments: >- >- VOID >- >-Returns: >- >- None >- >---*/ >-{ >- FIT_TABLE *FitTable; >- FIT_TABLE *TmpFitPtr; >- UINTN NumFitComponents; >- UINTN Index; >- >- GetFitTableStartAddress (&FitTable); >- TmpFitPtr =3D FitTable; >- NumFitComponents =3D 0; >- for (Index =3D 0; Index < FitTable->CompSize; Index++) { >- if ((TmpFitPtr->CvAndType & FIT_TYPE_MASK) !=3D >COMP_TYPE_FIT_UNUSED) { >- NumFitComponents +=3D 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 TAB= LE. >- This FIT table has to be immediately below the PAL_A Start and it conta= ins >- 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 locatio= n >- // >- Vtf1LastStartAddress -=3D 0x10; >- Vtf1TotalSize +=3D 0x10; >- >- GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress, >FIRST_VTF); >- >- CompFitPtr =3D (FIT_TABLE *) RelativeAddress; >- CompFitPtr->CompAddress =3D 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 i= s >- // being build and its current address will be fixed in FIT table. Curr= ently >- // we haven't implemented it so far and working on architectural >clarafication >- // >- // >- // Firmware Volume Size in 16 byte block >- // >- CompFitPtr->CompSize =3D ((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 =3D MAKE_VERSION (0, 0); >- >- // >- // Since we don't have any info about this file, we are making sure tha= t >- // checksum is not needed. >- // >- CompFitPtr->CvAndType =3D CV_N_TYPE (0, COMP_TYPE_FIT_FV_BOOT); >- >- // >- // Since non VTF component will reside outside the VTF, we will not hav= e 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 hen= ce >- // checksum >- // >- CompFitPtr->CheckSum =3D 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 s= till >- be required to update its location information in Firmware Volume, insi= de >- 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 =3D=3D 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 i= s >- // being build and its current address will be fixed in FIT table >- // >- CompFitPtr->CompAddress =3D 0; >- CompFitPtr->CompSize =3D VtfInfo->CompSize; >- CompFitPtr->CompVersion =3D MAKE_VERSION (VtfInfo->MajorVer, VtfInfo- >>MinorVer); >- CompFitPtr->CvAndType =3D CV_N_TYPE (VtfInfo->CheckSumRequired, >VtfInfo->CompType); >- >- // >- // Since non VTF component will reside outside the VTF, we will not hav= e 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 hen= ce >- // checksum >- // >- CompFitPtr->CheckSum =3D 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) =3D=3D COMP_TYPE_FIT_FV_BOOT) { >- CompFitPtr->CompAddress =3D Fv1BaseAddress; >- } >- >- return EFI_SUCCESS; >-} >- >-// >-// !!!WARNING >-// This function is updating the SALE_ENTRY in Itanium address space as p= er >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 =3D fopen (LongFilePath (VtfInfo->CompSymName), "rb"); >- >- if (Fp =3D=3D 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) !=3D NULL) { >- fscanf ( >- Fp, >- FormatString, >- Buff1, >- Buff2, >- OffsetStr, >- Buff3, >- Buff4, >- Buff5, >- Token >- ); >- if (strnicmp (Token, "SALE_ENTRY", 10) =3D=3D 0) { >- break; >- } >- } >- >- Offset =3D strtoul (OffsetStr, NULL, 16); >- >- *CompStartAddress +=3D Offset; >- SalEntryAdd =3D Fv1EndAddress - (SIZE_IA32_RESET_VECT + >SIZE_SALE_ENTRY_POINT); >- >- GetRelativeAddressInVtfBuffer (SalEntryAdd, &RelativeAddress, >FIRST_VTF); >- >- memcpy ((VOID *) RelativeAddress, (VOID *) CompStartAddress, sizeof >(UINT64)); >- >- if (Fp !=3D 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 n= on >- 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 =3D=3D NONE) { >- UpdateFitEntryForNonVTFComp (VtfInfo); >- return EFI_SUCCESS; >- } >- >- Fp =3D fopen (LongFilePath (VtfInfo->CompBinName), "rb"); >- >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName); >- return EFI_ABORTED; >- } >- >- FileSize =3D _filelength (fileno (Fp)); >- if ((VtfInfo->CompType =3D=3D COMP_TYPE_FIT_PAL_B) || (VtfInfo- >>CompType =3D=3D COMP_TYPE_FIT_PAL_A_SPECIFIC)) { >- >- // >- // BUGBUG: Satish to correct >- // >- FileSize -=3D SIZE_OF_PAL_HEADER; >- } >- >- if (VtfInfo->PreferredSize) { >- if (FileSize > VtfInfo->CompSize) { >- fclose (Fp); >- Error (NULL, 0, 2000, "Invalid parameter", "The component size is m= ore >than specified size."); >- return EFI_ABORTED; >- } >- >- FileSize =3D VtfInfo->CompSize; >- } >- >- Buffer =3D malloc ((UINTN) FileSize); >- if (Buffer =3D=3D NULL) { >- fclose (Fp); >- return EFI_OUT_OF_RESOURCES; >- } >- memset (Buffer, 0, (UINTN) FileSize); >- >- if ((VtfInfo->CompType =3D=3D COMP_TYPE_FIT_PAL_B) || (VtfInfo- >>CompType =3D=3D 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 h= eader >- // 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 vers= ion >- // info and implement any specific case inside GetComponentVersionInfo. >- // >- if (VtfInfo->CompType !=3D COMP_TYPE_FIT_PAL_B) { >- if (!VtfInfo->VersionPresent) { >- GetComponentVersionInfo (VtfInfo, Buffer); >- } >- } >- >- if (VtfInfo->LocationType =3D=3D SECOND_VTF) { >- >- CompStartAddress =3D (Vtf2LastStartAddress - FileSize); >- } else { >- CompStartAddress =3D (Vtf1LastStartAddress - FileSize); >- } >- >- if (VtfInfo->CompType =3D=3D COMP_TYPE_FIT_PAL_B) { >- Aligncheck =3D CheckAddressAlignment (CompStartAddress, 32 * 1024, >&NumAdjustByte); >- } else { >- Aligncheck =3D CheckAddressAlignment (CompStartAddress, 8, >&NumAdjustByte); >- } >- >- if (!Aligncheck) { >- CompStartAddress -=3D NumAdjustByte; >- } >- >- if (VtfInfo->LocationType =3D=3D SECOND_VTF && SecondVTF =3D=3D TRUE) { >- Vtf2LastStartAddress =3D CompStartAddress; >- Vtf2TotalSize +=3D (UINT32) (FileSize + NumAdjustByte); >- Status =3D UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, >SECOND_VTF); >- } else if (VtfInfo->LocationType =3D=3D FIRST_VTF) { >- Vtf1LastStartAddress =3D CompStartAddress; >- Vtf1TotalSize +=3D (UINT32) (FileSize + NumAdjustByte); >- Status =3D UpdateVtfBuffer (CompStartAddress, Buffer, FileSize, FIRST= _VTF); >- } else { >- free (Buffer); >- Error (NULL, 0, 2000,"Invalid Parameter", "There's component in secon= d >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 =3D=3D NULL) { >- free (Buffer); >- return EFI_ABORTED; >- } >- >- CompFitPtr->CompAddress =3D CompStartAddress | IPF_CACHE_BIT; >- if ((FileSize % 16) !=3D 0) { >- free (Buffer); >- Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a >multiple of 16."); >- return EFI_INVALID_PARAMETER; >- } >- //assert ((FileSize % 16) =3D=3D 0); >- CompFitPtr->CompSize =3D (UINT32) (FileSize / 16); >- CompFitPtr->CompVersion =3D MAKE_VERSION (VtfInfo->MajorVer, VtfInfo- >>MinorVer); >- CompFitPtr->CvAndType =3D CV_N_TYPE (VtfInfo->CheckSumRequired, >VtfInfo->CompType); >- if (VtfInfo->CheckSumRequired) { >- CompFitPtr->CheckSum =3D 0; >- CompFitPtr->CheckSum =3D CalculateChecksum8 (Buffer, (UINTN) FileSiz= e); >- } >- >- // >- // Free the buffer >- // >- if (Buffer) { >- free (Buffer); >- } >- >- // >- // Update the SYM file for this component based on it's start address. >- // >- Status =3D 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 =3D=3D COMP_TYPE_FIT_PEICORE) { >- Status =3D 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 =3D fopen (LongFilePath (VtfInfo->CompBinName), "rb"); >- >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", VtfInfo->CompBinName); >- return EFI_ABORTED; >- } >- >- FileSize =3D _filelength (fileno (Fp)); >- if (FileSize < 64) { >- fclose (Fp); >- Error (NULL, 0, 2000, "Invalid parameter", "PAL_A bin header is 64 by= tes, so >the Bin size must be larger than 64 bytes!"); >- return EFI_INVALID_PARAMETER; >- } >- FileSize -=3D 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 =3D VtfInfo->CompSize; >- } >- >- Buffer =3D malloc ((UINTN) FileSize); >- if (Buffer =3D=3D 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 th= is >buffer >- // >- if (!VtfInfo->VersionPresent) { >- GetComponentVersionInfo (VtfInfo, Buffer); >- } >- >- // >- // Read PAL_A file in a buffer >- // >- fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); >- fclose (Fp); >- >- PalStartAddress =3D Fv1EndAddress - (SIZE_TO_OFFSET_PAL_A_END + >FileSize); >- Vtf1LastStartAddress =3D PalStartAddress; >- Vtf1TotalSize +=3D (UINT32) FileSize; >- Status =3D UpdateVtfBuffer (PalStartAddress, Buffer, FileSize, FIR= ST_VTF); >- >- AbsAddress =3D Fv1EndAddress - SIZE_TO_PAL_A_FIT; >- GetRelativeAddressInVtfBuffer (AbsAddress, &RelativeAddress, FIRST_VTF)= ; >- PalFitPtr =3D (FIT_TABLE *) RelativeAddress; >- PalFitPtr->CompAddress =3D PalStartAddress | IPF_CACHE_BIT; >- //assert ((FileSize % 16) =3D=3D 0); >- if ((FileSize % 16) !=3D 0) { >- free (Buffer); >- Error (NULL, 0, 2000, "Invalid parameter", "Binary FileSize must be a >multiple of 16."); >- return EFI_INVALID_PARAMETER; >- } >- >- PalFitPtr->CompSize =3D (UINT32) (FileSize / 16); >- PalFitPtr->CompVersion =3D MAKE_VERSION (VtfInfo->MajorVer, VtfInfo- >>MinorVer); >- PalFitPtr->CvAndType =3D CV_N_TYPE (VtfInfo->CheckSumRequired, >VtfInfo->CompType); >- if (VtfInfo->CheckSumRequired) { >- PalFitPtr->CheckSum =3D 0; >- PalFitPtr->CheckSum =3D CalculateChecksum8 (Buffer, (UINTN) FileSize)= ; >- } >- >- if (Buffer) { >- free (Buffer); >- } >- >- // >- // Update the SYM file for this component based on it's start address. >- // >- Status =3D 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 allocate= d >because there is no size information."); >- return EFI_ABORTED; >- } >- >- if ((VtfInfo->CompSize % 16) !=3D 0) { >- Error (NULL, 0, 2000, "Invalid parameter", "Invalid FIT Table Size, i= t is not a >multiple of 16 bytes. Please correct the size."); >- } >- >- PalFitTableAdd =3D Fv1EndAddress - SIZE_TO_PAL_A_FIT; >- GetRelativeAddressInVtfBuffer (PalFitTableAdd, &RelativeAddress, >FIRST_VTF); >- PalFitPtr =3D (FIT_TABLE *) RelativeAddress; >- PalFitTableAdd =3D (PalFitPtr->CompAddress - VtfInfo->CompSize); >- >- FitTableAdd =3D (PalFitPtr->CompAddress - 0x10) - VtfInfo->Co= mpSize; >- FitTableAddressOffset =3D Fv1EndAddress - (SIZE_IA32_RESET_VECT + >SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD); >- GetRelativeAddressInVtfBuffer (FitTableAddressOffset, &RelativeAddress, >FIRST_VTF); >- *(UINT64 *) RelativeAddress =3D FitTableAdd; >- >- GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF= ); >- >- // >- // Update Fit Table with FIT Signature and FIT info in first 16 bytes. >- // >- FitStartPtr =3D (FIT_TABLE *) RelativeAddress; >- >- strncpy ((CHAR8 *) &FitStartPtr->CompAddress, FIT_SIGNATURE, 8); // >"_FIT_ " >- assert (((VtfInfo->CompSize & 0x00FFFFFF) % 16) =3D=3D 0); >- FitStartPtr->CompSize =3D (VtfInfo->CompSize & 0x00FFFFFF) / 16; >- FitStartPtr->CompVersion =3D MAKE_VERSION (VtfInfo->MajorVer, VtfInfo- >>MinorVer); >- >- // >- // BUGBUG: If a checksum is required, add code to checksum the FIT tabl= e. >Also >- // determine what to do for things like the FV component that aren't ea= sily >checksummed. >- // The checksum will be done once we are done with all the componet >update in the FIT >- // table >- // >- FitStartPtr->CvAndType =3D CV_N_TYPE (VtfInfo->CheckSumRequired, >VtfInfo->CompType); >- >- NumFitComp =3D 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 =3D 0; Index < (NumFitComp - 1); Index++) { >- FitStartPtr->CvAndType =3D 0x7F; // Initialize all with UNUSED >- FitStartPtr++; >- } >- >- Vtf1TotalSize +=3D VtfInfo->CompSize; >- Vtf1LastStartAddress -=3D 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 =3D=3D FIRST_VTF) { >- GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress= , >FIRST_VTF); >- VtfBuffer =3D (VOID *) RelativeAddress; >- } else { >- GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress= , >SECOND_VTF); >- VtfBuffer =3D (VOID *) RelativeAddress; >- } >- >- Fp =3D fopen (LongFilePath (FileName), "wb"); >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", FileName); >- return EFI_ABORTED; >- } >- >- NumByte =3D fwrite (VtfBuffer, sizeof (UINT8), (UINTN) VtfSize, Fp); >- >- if (Fp) { >- fclose (Fp); >- } >- >- if (NumByte !=3D (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 mapp= ed >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 =3D=3D FIRST_VTF) { >- if ((StartAddress | IPF_CACHE_BIT) < (Vtf1LastStartAddress | >IPF_CACHE_BIT)) { >- Error (NULL, 0, 2000, "Invalid parameter", "Start Address is less t= han the >VTF start address."); >- return EFI_ABORTED; >- } >- >- LocalBufferPtrToWrite =3D (UINT8 *) Vtf1EndBuffer; >- >- LocalBufferPtrToWrite -=3D (Fv1EndAddress - StartAddress); >- >- } else { >- >- if ((StartAddress | IPF_CACHE_BIT) < (Vtf2LastStartAddress | >IPF_CACHE_BIT)) { >- Error (NULL, 0, 2000, "Invalid parameter", "Error StartAddress"); >- return EFI_ABORTED; >- } >- LocalBufferPtrToWrite =3D (UINT8 *) Vtf2EndBuffer; >- LocalBufferPtrToWrite -=3D (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 F= V. >- 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 =3D >EFI_FFS_VOLUME_TOP_FILE_GUID; >- >- // >- // Find the VTF file header location >- // >- if (LocType =3D=3D FIRST_VTF) { >- GetRelativeAddressInVtfBuffer (Vtf1LastStartAddress, &RelativeAddress= , >FIRST_VTF); >- FileHeader =3D (EFI_FFS_FILE_HEADER *) RelativeAddress; >- } else { >- GetRelativeAddressInVtfBuffer (Vtf2LastStartAddress, &RelativeAddress= , >SECOND_VTF); >- FileHeader =3D (EFI_FFS_FILE_HEADER *) RelativeAddress; >- } >- >- if (FileHeader =3D=3D NULL) { >- return EFI_INVALID_PARAMETER; >- } >- >- // >- // write header >- // >- memset (FileHeader, 0, sizeof (EFI_FFS_FILE_HEADER)); >- memcpy (&FileHeader->Name, &EfiFirmwareVolumeTopFileGuid, sizeof >(EFI_GUID)); >- FileHeader->Type =3D EFI_FV_FILETYPE_RAW; >- FileHeader->Attributes =3D FFS_ATTRIB_CHECKSUM; >- >- // >- // Now FileSize includes the EFI_FFS_FILE_HEADER >- // >- FileHeader->Size[0] =3D (UINT8) (TotalVtfSize & 0x000000FF); >- FileHeader->Size[1] =3D (UINT8) ((TotalVtfSize & 0x0000FF00) >> 8); >- FileHeader->Size[2] =3D (UINT8) ((TotalVtfSize & 0x00FF0000) >> 16); >- >- // >- // Fill in checksums and state, all three must be zero for the checksum= s. >- // >- FileHeader->IntegrityCheck.Checksum.Header =3D 0; >- FileHeader->IntegrityCheck.Checksum.File =3D 0; >- FileHeader->State =3D 0; >- FileHeader->IntegrityCheck.Checksum.Header =3D CalculateChecksum8 >((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER)); >- FileHeader->IntegrityCheck.Checksum.File =3D CalculateChecksum8 ((UI= NT8 >*) (FileHeader + 1), TotalVtfSize - sizeof (EFI_FFS_FILE_HEADER)); >- FileHeader->State =3D EFI_FILE_HEADER_CONSTRU= CTION | >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 attach= ed.. >- >-Returns: >- >- EFI_SUCCESS - The function completed successfully >- EFI_UNSUPPORTED - The input parameter is error >- >---*/ >-{ >- if ((FwVolSize > 0x40) && ((BaseAddress + FwVolSize) % 8 =3D=3D 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 in= fo.. >- 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 =3D fopen (LongFilePath (FileName), "rb"); >- >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", FileName); >- return EFI_ABORTED; >- } >- >- FileSize =3D _filelength (fileno (Fp)); >- >- if (FileSize > 16) { >- fclose (Fp); >- return EFI_ABORTED; >- } >- >- Buffer =3D malloc (FileSize); >- if (Buffer =3D=3D NULL) { >- fclose (Fp); >- return EFI_OUT_OF_RESOURCES; >- } >- >- fread (Buffer, sizeof (UINT8), FileSize, Fp); >- >- LocalVtfBuffer =3D (UINT8 *) Vtf1EndBuffer - SIZE_IA32_RESET_VECT; >- memcpy (LocalVtfBuffer, Buffer, FileSize); >- >- if (Buffer) { >- free (Buffer); >- } >- >- if (Fp !=3D 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 =3D FileListHeadPtr; >- while (FileListPtr !=3D NULL) { >- TempFileListPtr =3D FileListPtr->NextVtfInfo; >- free (FileListPtr); >- FileListPtr =3D 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 =3D EFI_SUCCESS; >- >- ParsedInfoPtr =3D FileListHeadPtr; >- >- while (ParsedInfoPtr !=3D 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 =3D 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 =3D 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 utili= zed >- // to extract the Firmware Volume Start address where this VTF will= be >- // of part. >- // >- if (Status =3D=3D 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 =3D EFI_SUCCESS; >- break; >- >- default: >- // >- // Any other component type should be handled here. This will creat= e the >- // image in specified VTF and create appropriate entry about this >- // component in FIT Entry. >- // >- Status =3D CreateAndUpdateComponent (ParsedInfoPtr); >- if (EFI_ERROR (Status)) { >- Error (NULL, 0, 0002, "Error updating component", ParsedInfoPtr- >>CompName); >- return EFI_ABORTED; >- } else { >- break;} >- } >- >- ParsedInfoPtr =3D 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 =3D EFI_UNSUPPORTED; >- VtfFP =3D fp; >- >- if (StartAddress2 =3D=3D 0) { >- SecondVTF =3D FALSE; >- } else { >- SecondVTF =3D TRUE; >- } >- >- Fv1BaseAddress =3D StartAddress1; >- Fv1EndAddress =3D Fv1BaseAddress + Size1; >- if (Fv1EndAddress !=3D 0x100000000ULL || Size1 < 0x100000) { >- Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and Siz= e >parameters!"); >- if (Size1 < 0x100000) { >- Error (NULL, 0, 2000, "Invalid parameter", "The FwVolumeSize must b= e >larger than 1M!"); >- } else if (SecondVTF !=3D TRUE) { >- Error (NULL, 0, 2000, "Invalid parameter", "BaseAddress + FwVolumeS= ize >must equal 0x100000000!"); >- } >- Usage(); >- return EFI_INVALID_PARAMETER; >- } >- >- // >- // The image buffer for the First VTF >- // >- Vtf1Buffer =3D malloc ((UINTN) Size1); >- if (Vtf1Buffer =3D=3D 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 =3D (UINT8 *) Vtf1Buffer + Size1; >- Vtf1LastStartAddress =3D Fv1EndAddress | IPF_CACHE_BIT; >- >- if (SecondVTF) { >- Fv2BaseAddress =3D StartAddress2; >- Fv2EndAddress =3D Fv2BaseAddress + Size2; >- if (Fv2EndAddress !=3D StartAddress1) { >- Error (NULL, 0, 2000, "Invalid parameter", "Error BaseAddress and S= ize >parameters!"); >- if (SecondVTF =3D=3D 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 =3D malloc ((UINTN) Size2); >- if (Vtf2Buffer =3D=3D NULL) { >- Error (NULL, 0, 4001, "Resource", "Not enough resources available t= o >create memory mapped file for the Boot Strap File!"); >- return EFI_OUT_OF_RESOURCES; >- } >- memset (Vtf2Buffer, 0x00, (UINTN) Size2); >- Vtf2EndBuffer =3D (UINT8 *) Vtf2Buffer + Size2; >- Vtf2LastStartAddress =3D Fv2EndAddress | IPF_CACHE_BIT; >- } >- >- Status =3D GetVtfRelatedInfoFromInfFile (VtfFP); >- >- if (Status !=3D EFI_SUCCESS) { >- Error (NULL, 0, 0003, "Error parsing file", "the input file."); >- CleanUpMemory (); >- return Status; >- } >- >- Status =3D ProcessAndCreateVtf (Size1); >- if (Status !=3D EFI_SUCCESS) { >- CleanUpMemory (); >- return Status; >- } >- >- if (SectionOptionFlag) { >- Status =3D UpdateIA32ResetVector (IA32BinFile, Vtf1TotalSize); >- if (Status !=3D 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 +=3D sizeof (EFI_FFS_FILE_HEADER); >- Vtf1LastStartAddress -=3D sizeof (EFI_FFS_FILE_HEADER); >- >- Status =3D UpdateFfsHeader (Vtf1TotalSize, FIRST_VTF); >- if (Status !=3D EFI_SUCCESS) { >- CleanUpMemory (); >- return Status; >- } >- // >- // Update the VTF buffer into specified VTF binary file >- // >- Status =3D WriteVtfBinary (OutFileName1, Vtf1TotalSize, FIRST_VTF); >- >- if (SecondVTF) { >- Vtf2TotalSize +=3D sizeof (EFI_FFS_FILE_HEADER); >- Vtf2LastStartAddress -=3D sizeof (EFI_FFS_FILE_HEADER); >- Status =3D UpdateFfsHeader (Vtf2TotalSize, SECOND_VTF); >- if (Status !=3D EFI_SUCCESS) { >- CleanUpMemory (); >- return Status; >- } >- >- // >- // Update the VTF buffer into specified VTF binary file >- // >- Status =3D 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 =3D malloc (sizeof (UINT64)); >- if (StartAddressPtr =3D=3D NULL) { >- return EFI_OUT_OF_RESOURCES; >- } >- *StartAddressPtr =3D StartAddress; >- >- Fp =3D fopen (LongFilePath (OutFileName1), "rb"); >- >- if (Fp =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", OutFileName1); >- if (StartAddressPtr) { >- free (StartAddressPtr); >- } >- return EFI_ABORTED; >- } >- >- FirstFwVSize =3D _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 =3D 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 =3D=3D 0 || DestFileName =3D=3D NULL || SourceFileName = =3D=3D NULL) >{ >- return EFI_INVALID_PARAMETER; >- } >- >- // >- // Open the source file >- // >- SourceFile =3D fopen (LongFilePath (SourceFileName), "r"); >- if (SourceFile =3D=3D NULL) { >- >- // >- // SYM files are not required. >- // >- return EFI_SUCCESS; >- } >- >- // >- // Use the file name minus extension as the base for tokens >- // >- if (strlen (SourceFileName) >=3D MAX_LONG_FILE_PATH) { >- fclose (SourceFile); >- Error (NULL, 0, 2000, "Invalid parameter", "The source file name is t= oo >long."); >- return EFI_ABORTED; >- } >- strncpy (BaseToken, SourceFileName, MAX_LONG_FILE_PATH - 1); >- BaseToken[MAX_LONG_FILE_PATH - 1] =3D 0; >- strtok (BaseToken, ". \t\n"); >- if (strlen (BaseToken) + strlen ("__") >=3D MAX_LONG_FILE_PATH) { >- fclose (SourceFile); >- Error (NULL, 0, 2000, "Invalid parameter", "The source file name is t= oo >long."); >- return EFI_ABORTED; >- } >- strncat (BaseToken, "__", MAX_LONG_FILE_PATH - strlen (BaseToken) - 1); >- >- // >- // Open the destination file >- // >- DestFile =3D fopen (LongFilePath (DestFileName), "a+"); >- if (DestFile =3D=3D 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) !=3D 0) { >- fclose (SourceFile); >- fclose (DestFile); >- Error (NULL, 0, 2000, "Invalid parameter", "not at the beginning of t= he >output file."); >- return EFI_ABORTED; >- } >- >- StartLocation =3D ftell (DestFile); >- >- if (StartLocation =3D=3D 0) { >- fprintf (DestFile, "TEXTSYM format | V1.0\n"); >- } else if (StartLocation =3D=3D -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) =3D=3D NULL) { >- Buffer[0] =3D 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) =3D=3D 0) { >- >- // >- // Read a line >- // >- if (fscanf (SourceFile, FormatString, Type, Address, Section, Token) = =3D=3D 4) { >- >- // >- // Get the token address >- // >- AsciiStringToUint64 (Address, TRUE, &TokenAddress); >- if (TokenAddress > FileSize) { >- // >- // Symbol offset larger than FileSize. This Symbol can't be in Bi= n file. Don't >print them. >- // >- break; >- } >- >- // >- // Add the base address, the size of the FFS file header and the si= ze of the >peim header. >- // >- TokenAddress +=3D 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 =3D Fv1EndAddress - (SIZE_IA32_RESET_VECT + >SIZE_SALE_ENTRY_POINT + SIZE_FIT_TABLE_ADD); >- >- // >- // Translate this Itanium-based address in terms of local buffer addres= s >which >- // contains the image for Boot Strapped File >- // >- GetRelativeAddressInVtfBuffer (FitTableAddOffset, &RelativeAddress, >FIRST_VTF); >- FitTableAdd =3D *(UINTN *) RelativeAddress; >- >- GetRelativeAddressInVtfBuffer (FitTableAdd, &RelativeAddress, FIRST_VTF= ); >- >- TmpFitPtr =3D (FIT_TABLE *) RelativeAddress; >- >- Size =3D TmpFitPtr->CompSize * 16; >- >- if ((TmpFitPtr->CvAndType & CHECKSUM_BIT_MASK) >> 7) { >- TmpFitPtr->CheckSum =3D 0; >- TmpFitPtr->CheckSum =3D CalculateChecksum8 ((UINT8 *) TmpFitPtr, Size= ); >- } else { >- TmpFitPtr->CheckSum =3D 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 rig= hts >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 V= olume\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 ex= it.\n"); >- fprintf (stdout, " -q, --quiet Disable all messages except F= ATAL >ERRORS.\n"); >- fprintf (stdout, " -d, --debug [#, 0-9] Enable debug messages at leve= l #.\n"); >-} >- >-int >-main ( >- IN int argc, >- IN char **argv >- ) >-/*++ >- >-Routine Description: >- >- This utility uses GenVtf.dll to build a Boot Strap File Image which wil= l 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 =3D 0; >- StartAddress2 =3D 0; >- FwVolSize1 =3D 0; >- FwVolSize2 =3D 0; >- FirstRoundB =3D TRUE; >- FirstRoundS =3D TRUE; >- FirstRoundO =3D TRUE; >- DebugMode =3D FALSE; >- OutFileName1 =3D NULL; >- OutFileName2 =3D NULL; >- VtfFP =3D NULL; >- DebugLevel =3D 0; >- >- // >- // Verify the correct number of arguments >- // >- if (argc =3D=3D 1) { >- Usage(); >- return 0; >- } >- >- if ((strcmp(argv[1], "-h") =3D=3D 0) || (strcmp(argv[1], "--help") =3D= =3D 0)) { >- Usage(); >- return 0; >- } >- >- if ((strcmp(argv[1], "--version") =3D=3D 0)) { >- Version(); >- return 0; >- } >- >- // >- // Parse the command line arguments >- // >- for (Index =3D 1; Index < argc; Index +=3D 2) { >- if ((stricmp (argv[Index], "-o") =3D=3D 0) || (stricmp (argv[Index], = "--output") >=3D=3D 0)) { >- if (argv[Index + 1] =3D=3D NULL || argv[Index + 1][0] =3D=3D '-') { >- Error (NULL, 0, 1003, "Invalid option value", "Output file is mis= sing for -o >option"); >- goto ERROR; >- } >- // >- // Get the output file name >- // >- VTF_OUTPUT =3D TRUE; >- if (FirstRoundO) { >- // >- // It's the first output file name >- // >- OutFileName1 =3D (CHAR8 *)argv[Index+1]; >- FirstRoundO =3D FALSE; >- } else { >- // >- //It's the second output file name >- // >- OutFileName2 =3D (CHAR8 *)argv[Index+1]; >- } >- continue; >- } >- >- if ((stricmp (argv[Index], "-f") =3D=3D 0) || (stricmp (argv[Index], = "--filename") >=3D=3D 0)) { >- if (argv[Index + 1] =3D=3D NULL || argv[Index + 1][0] =3D=3D '-') { >- 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 =3D argv[Index+1]; >- if (VtfFP !=3D NULL) { >- // >- // VTF file name has been given previously, override with the new= value >- // >- fclose (VtfFP); >- } >- VtfFP =3D fopen (LongFilePath (VtfFileName), "rb"); >- if (VtfFP =3D=3D NULL) { >- Error (NULL, 0, 0001, "Error opening file", VtfFileName); >- goto ERROR; >- } >- continue; >- } >- >- if ((stricmp (argv[Index], "-r") =3D=3D 0) || (stricmp (argv[Index], = "--baseaddr") >=3D=3D 0)) { >- if (FirstRoundB) { >- Status =3D AsciiStringToUint64 (argv[Index + 1], FALSE, &Sta= rtAddress1); >- FirstRoundB =3D FALSE; >- } else { >- Status =3D AsciiStringToUint64 (argv[Index + 1], FALSE, &StartAdd= ress2); >- } >- if (Status !=3D 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") =3D=3D 0) || (stricmp (argv[Index], = "--size") =3D=3D 0)) >{ >- if (FirstRoundS) { >- Status =3D AsciiStringToUint64 (argv[Index + 1], FALSE, &FwV= olSize1); >- FirstRoundS =3D FALSE; >- } else { >- Status =3D AsciiStringToUint64 (argv[Index + 1], FALSE, &FwVolSiz= e2); >- SecondVTF =3D TRUE; >- } >- >- if (Status !=3D 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") =3D=3D 0) || (stricmp (argv[Index], = "--verbose") >=3D=3D 0)) { >- VerboseMode =3D TRUE; >- Index--; >- continue; >- } >- >- if ((stricmp (argv[Index], "-q") =3D=3D 0) || (stricmp (argv[Index], = "--quiet") =3D=3D >0)) { >- QuietMode =3D TRUE; >- Index--; >- continue; >- } >- >- if ((stricmp (argv[Index], "-d") =3D=3D 0) || (stricmp (argv[Index], = "--debug") =3D=3D >0)) { >- // >- // debug level specified >- // >- Status =3D AsciiStringToUint64(argv[Index + 1], FALSE, &DebugLevel)= ; >- if (EFI_ERROR (Status)) { >- Error (NULL, 0, 1003, "Invalid option value", "%s =3D %s", argv[I= ndex], >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 <=3D 9) &&(DebugLevel >=3D 5)) { >- DebugMode =3D TRUE; >- } else { >- DebugMode =3D FALSE; >- } >- continue; >- } >- >- Error (NULL, 0, 2000, "Invalid parameter", "Unrecognized argument %s.= ", >argv[Index]); >- goto ERROR; >- } >- >- if (VtfFP =3D=3D 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 =3D=3D FALSE) { >- if (SecondVTF =3D=3D TRUE) { >- OutFileName1 =3D VTF_OUTPUT_FILE1; >- OutFileName2 =3D VTF_OUTPUT_FILE2; >- } else { >- OutFileName1 =3D VTF_OUTPUT_FILE1; >- } >- SymFileName =3D VTF_SYM_FILE; >- } else { >- INTN OutFileNameLen; >- INTN NewIndex; >- >- assert (OutFileName1); >- OutFileNameLen =3D strlen(OutFileName1); >- >- for (NewIndex =3D OutFileNameLen; NewIndex > 0; --NewIndex) { >- if (OutFileName1[NewIndex] =3D=3D '/' || OutFileName1[NewIndex] =3D= =3D '\\') { >- break; >- } >- } >- if (NewIndex =3D=3D 0) { >- SymFileName =3D VTF_SYM_FILE; >- } else { >- INTN SymFileNameLen =3D NewIndex + 1 + strlen(VTF_SYM_FILE); >- SymFileName =3D malloc(SymFileNameLen + 1); >- if (SymFileName =3D=3D 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] =3D '\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 =3D GenerateVtfImage (StartAddress1, FwVolSize1, StartAddress2, >FwVolSize2, VtfFP); >- >- if (EFI_ERROR (Status)) { >- switch (Status) { >- >- case EFI_INVALID_PARAMETER: >- Error (NULL, 0, 2000, "Invalid parameter", "Invalid parameter passe= d 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 unk= nown >status %x.", (int) Status ); >- break; >- } >- } >-ERROR: >- if (VtfFP !=3D 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 St= rap >File >- >-Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.
>-This program and the accompanying materials are licensed and made >available >-under the terms and conditions of the BSD License which accompanies this >-distribution. The full text of the license may be found at >-http://opensource.org/licenses/bsd-license.php >- >-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, >-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER >EXPRESS OR IMPLIED. >- >-**/ >- >-// >-// Module Coded to EFI 2.0 Coding Conventions >-// >-#ifndef __GEN_VTF_H__ >-#define __GEN_VTF_H__ >- >-// >-// External Files Referenced >-// >-#include >-#include >-#include >-#ifndef __GNUC__ >-#include >-#endif >-#include "assert.h" >-#include >-#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 =3D 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, Vers= ion 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: '=3D' : incompatible types - from 'struct >_ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' >- // Fixed - warning C4133: '=3D' : incompatible types - from 'struct >_ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' >- // Fixed - warning C4133: '=3D' : incompatible types - from 'struct >_ParsedVtfInfo *' to 'struct _PARSED_VTF_INFO *' >- // Fixed - warning C4133: '=3D' : 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 mapp= ed >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.
>-# This program and the accompanying materials >-# are licensed and made available under the terms and conditions of the B= SD >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 =3D GenVtf >- >-LIBS =3D $(LIB_PATH)\Common.lib >- >-OBJECTS =3D 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 =3D \ > 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\fb= idi >\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{\*\fal= t >Century Gothic};} >-{\f631\fbidi \fswiss\fcharset161\fprq2 Calibri Greek{\*\falt Century >Gothic};}{\f632\fbidi \fswiss\fcharset162\fprq2 Calibri Tur{\*\falt Centur= y >Gothic};}{\f635\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic{\*\falt Cen= tury >Gothic};} >-{\f636\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese){\*\falt Centu= ry >Gothic};}{\f648\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt Times Ne= w >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{\*\f= alt >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\tsbrd= rr\ >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\fcs= 1 >\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 \sbasedo= n10 >\ssemihidden \sunhideused \styrsid4072718 annotation reference;}{ >-\s20\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fc= s1 >\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 \f4= 3\fs20 >\sbasedon10 \slink20 \slocked \ssemihidden \styrsid4072718 Comment Text >Char;}{ >-\s22\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fc= s1 >\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\fc= s0 >\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\lin= 0 >\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;}}{\*\revtb= l >{Unknown;}{Zhu, Yonghong;}}{\*\rsidtbl >\rsid351840\rsid2906062\rsid3369612\rsid3607127\rsid4064336\rsid4072718\rs= i >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) fo= r >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\f= cs0 >\b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid15819932 >-\hich\af43\dbch\af31505\loch\f43 <}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs= 0 >\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 -r -s >}{\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 Fil= e, >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\insrsid1488084= 9 >\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\f= cs1 >\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 \ltrc= h\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\f= cs0 >\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\afs= 18 >\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\fc= s1 >\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 \ltr= ch\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\afs= 18 >\ltrch\fcs0 \fs18\cf1\insrsid14880849 >-\hich\af43\dbch\af31505\loch\f43 will be created}{\rtlch\fcs1 \af43\afs1= 8 >\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 us= e >-\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 ad= dress >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 progr= am >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 specifyi= ng >\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 thi= s >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\tbllkhd= r >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\f= a >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\tbllkhd= r >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\tbllkhd= r >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\af= s18 >\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\f= 43 >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\f= 43 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\f= 43 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 Non= e >-\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\fc= s1 >\ab\af43\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid7230979 >\hich\af43\dbch\af31505\loch\f43 also}{\rtlch\fcs1 \ab\af0\afs28 \ltrch\fc= s0 >\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 Non= e >-\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 Corporat= ion. >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 \lsdprior= ity1 >\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 \lsdlocke= d0 >Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 >\lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shad= ing; >-\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light >Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked= 0 >Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 >\lsdlocked0 Medium List 2; >-\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Mediu= m >Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 >Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdl= ocked0 >Colorful List; >-\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light >Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriori= ty62 >\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;\lsdqforma= t1 >\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 \lsdloc= ked0 >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 \lsdlock= ed0 >Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent >2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdloc= ked0 >Dark List Accent 2; >-\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdl= ocked0 >Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent >2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdloc= ked0 >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 \lsdlock= ed0 >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 \lsdlock= ed0 >Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent >4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked= 0 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 \lsdlock= ed0 >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 \lsdlock= ed0 >Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent >5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked= 0 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 \lsdlock= ed0 >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 \lsdlock= ed0 >Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent >6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked= 0 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 \lsdlock= ed0 >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 \lsdlock= ed0 >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 \lsdlo= cked0 >Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsd= locked0 >Plain Table 4; >-\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid = Table >Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdloc= ked0 >Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlo= cked0 >Grid Table 4; >-\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 G= rid >Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdprio= rity46 >\lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Ta= ble 2 >Accent 1; >-\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocke= d0 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 Ta= ble 2 >Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; >-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocke= d0 Grid >Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Acc= ent >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 \lsdlocke= d0 Grid >Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdprio= rity50 >\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 \lsdlocke= d0 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 Ta= ble 2 >Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; >-\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocke= d0 Grid >Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Acc= ent >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 \lsdlocke= d0 List >Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent >1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlock= ed0 List >Table 3 Accent 1; >-\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocke= d0 List >Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Acc= ent >1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; >-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \ls= dlocked0 >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 \lsd= locked0 >List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Col= orful >Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; >-\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocke= d0 List >Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdprio= rity50 >\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 \lsdlocke= d0 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 Ta= ble 2 >Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; >-\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocke= d0 List >Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Acc= ent >5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; >-\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \ls= dlocked0 >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 \lsd= locked0 >List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Col= orful >Accent 6;}}{\*\datastore 010500000200000018000000 >- >4d73786d6c322e534158584d4c5265616465722e362e30000000000000000000000 >60000 >- >d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff09000600 >0000000000000000000001000000010000000000000000100000feffffff00000000fe >ffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff= ffffffffffffff >ffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffff= ffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff= fffffffffffffffffffff >ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff >- >ffffffffffffffffffffffffffffffff52006f006f007400200045006e0074007200790000= 000 >00000000000000000000000000000000000000000000000000000000000000000000 >00000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963= 2 >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