From: bbahnsen Date: Wed, 21 Jun 2006 21:09:12 +0000 (+0000) Subject: Not needed X-Git-Tag: edk2-stable201903~25204 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=ecbc84213ca7f54b98863572c40af6a91cd569bc Not needed git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@588 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/Tools/Source/TianoTools/GenFdImage/GenFdImage.h b/Tools/Source/TianoTools/GenFdImage/GenFdImage.h deleted file mode 100644 index a2c1afb711..0000000000 --- a/Tools/Source/TianoTools/GenFdImage/GenFdImage.h +++ /dev/null @@ -1,87 +0,0 @@ -/*++ - -Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved -This software and associated documentation (if any) is furnished -under a license and may only be used or copied in accordance -with the terms of the license. Except as permitted by such -license, no part of this software or documentation may be -reproduced, stored in a retrieval system, or transmitted in any -form or by any means without the express written consent of -Intel Corporation. - - -Module Name: - - GenFdImage.h - -Abstract: - - This file contains the relevant declarations required - to generate the Firmware Device - ---*/ - -// -// Coded to EFI 2.0 Coding Standard -// -#ifndef _EFI_GEN_FD_IMAGE_H -#define _EFI_GEN_FD_IMAGE_H - -// -// Included Header files -// -#include -#include -#include -#include - -#include "ParseInf.h" - -// -// Defines -// -#define FILE_NAME_SIZE 256 - -// -// Type Definition -// -typedef struct { - UINT64 FdSize; - UINT64 FdBaseAddress; - UINT8 PadValue; - CHAR8 OutFileName[FILE_NAME_SIZE]; -} FDINFO; - -// -// Exported Function Prototype -// -EFI_STATUS -GenerateFdImage ( - IN UINT64 BaseAddress, - IN UINT64 Size, - IN UINT8 PadByte, - IN CHAR8 *OutFile, - IN CHAR8 **FileList - ) -/*++ - -Routine Description: - - GC_TODO: Add function description - -Arguments: - - BaseAddress - GC_TODO: add argument description - Size - GC_TODO: add argument description - PadByte - GC_TODO: add argument description - OutFile - GC_TODO: add argument description - FileList - GC_TODO: add argument description - -Returns: - - GC_TODO: add return values - ---*/ -; - -#endif diff --git a/Tools/Source/TianoTools/GenFdImage/GenFdImageDll.c b/Tools/Source/TianoTools/GenFdImage/GenFdImageDll.c deleted file mode 100644 index 057c1088e8..0000000000 --- a/Tools/Source/TianoTools/GenFdImage/GenFdImageDll.c +++ /dev/null @@ -1,864 +0,0 @@ -/*++ -Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved -This software and associated documentation (if any) is furnished -under a license and may only be used or copied in accordance -with the terms of the license. Except as permitted by such -license, no part of this software or documentation may be -reproduced, stored in a retrieval system, or transmitted in any -form or by any means without the express written consent of -Intel Corporation. - - - Module Name: - GenFdImageDll.C - - Abstarct: - This file contains the relevant functions required to complete - the API to generate Firmware Device ---*/ - -// GC_TODO: fix comment to add: Abstract: -// -// This tells the compiler to export the DLL functions -// -#define GEN_FD_IMAGE_EXPORTS - -#include -#include -#include -#include - -#include - -#include "GenFdImage.h" -#include "ParseInf.h" - -// -// Global declaration -// -UINTN ValidLineNum = 0; - -UINTN NumFvFiles = 0; -static UINT64 LastAddress = 0; - -CHAR8 **TokenStr; -CHAR8 **OrgStrTokPtr; - -FDINFO *FdInfo; -FDINFO *OrgFdInfoPtr; - -FVINFO **FvInfo; -FVINFO **OrgFvInfoPtr; - -// -// Global function declarations -// -EFI_STATUS -BuildFirmwareDeviceBinaryFromFwVolumes ( - IN UINT64 FvBaseAddress, - IN CHAR8 *FvFileName, - IN CHAR8 *FdFileName - ); - -INTN -CompareItems ( - IN const VOID *Arg1, - IN const VOID *Arg2 - ) -/*++ -Description: - - This function is used by qsort to sort the Fv list based on FvBaseAddress - -Input: - Arg1 - Arg2 - -Return: - - None ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: Arg1 - add argument and description to function comment -// GC_TODO: Arg2 - add argument and description to function comment -{ - if ((*(FVINFO **) Arg1)->FvBaseAddress > (*(FVINFO **) Arg2)->FvBaseAddress) { - return 1; - } else if ((*(FVINFO **) Arg1)->FvBaseAddress < (*(FVINFO **) Arg2)->FvBaseAddress) { - return -1; - } else { - return 0; - } -} - -VOID -BuildTokenList ( - IN CHAR8 *Token - ) -/*++ -Description: - - This function builds the token list in an array which will be parsed later - -Input: - Token String, - -Return: - - None ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: Token - add argument and description to function comment -{ - - strcpy (*TokenStr, Token); - TokenStr++; -} - -VOID -TrimLine ( - IN CHAR8 *Line - ) -/*++ -Description: - - This function cleans up the line by removing all whitespace and - comments - -Input: - - Line String, - -Return: - None ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: Line - add argument and description to function comment -{ - CHAR8 TmpLine[FILE_NAME_SIZE]; - CHAR8 c; - CHAR8 *Ptr0; - UINTN i; - UINTN j; - - // - // Change '#' to '//' for Comment style - // - // if((Ptr0=strchr(Line, '#')) != NULL) { - // - if ((Ptr0 = strstr (Line, "//")) != NULL) { - Line[Ptr0 - Line] = 0; - } - - i = j = 0; - - while ((c = Line[i]) != 0) { - if ((c != ' ') && (c != '\t') && (c != '\n')) { - TmpLine[j++] = c; - } - - i++; - } - - TmpLine[j] = 0; - strcpy (Line, TmpLine); -} - -VOID -ValidLineCount ( - IN FILE *Fp - ) -/*++ - -Description: - - This function calculated number of valid lines in a input file. - -Input: - - Fp Pointer to a file handle which has been opened. - -Return: - - None ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: Fp - add argument and description to function comment -{ - CHAR8 Buff[FILE_NAME_SIZE]; - - while (fgets (Buff, sizeof (Buff), Fp)) { - TrimLine (Buff); - if (Buff[0] == 0) { - continue; - } - - ValidLineNum++; - } -} - -VOID -ParseInputFile ( - IN FILE *Fp - ) -/*++ - -Description: - - This function parses the input file and tokenize the string - -Input: - - Fp Pointer to a file handle which has been opened. - -Return: - - None ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: Fp - add argument and description to function comment -{ - CHAR8 *Token; - CHAR8 Buff[FILE_NAME_SIZE]; - CHAR8 OrgLine[FILE_NAME_SIZE]; - CHAR8 Str[FILE_NAME_SIZE]; - CHAR8 Delimit[] = "="; - - while (fgets (Buff, sizeof (Buff), Fp) != NULL) { - strcpy (OrgLine, Buff); - TrimLine (Buff); - - if (Buff[0] == 0) { - continue; - } - - Token = strtok (Buff, Delimit); - - while (Token != NULL) { - strcpy (Str, Token); - BuildTokenList (Str); - Token = strtok (NULL, Delimit); - } - } -} - -EFI_STATUS -InitializeComps ( - VOID - ) -/*++ - -Description: - - This function intializes the relevant global variable which is being - used to store the information retrieved from INF file. - -Input: - - None - -Return: - - EFI_STATUS ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - UINTN Index; - - FdInfo = malloc (sizeof (FDINFO)); - - if (FdInfo == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - OrgFdInfoPtr = FdInfo; - - FvInfo = malloc (sizeof (int) * NumFvFiles); - - if (FvInfo == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - OrgFvInfoPtr = FvInfo; - - for (Index = 0; Index < NumFvFiles; Index++) { - *FvInfo = malloc (sizeof (FVINFO)); - - if (*FvInfo == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - memset (*FvInfo, 0, sizeof (FVINFO)); - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - - return EFI_SUCCESS; -} - -VOID -InitializeInFileInfo ( - VOID - ) -/*++ - -Description: - - This function intializes the relevant global variable which is being - used to store the information retrieved from INF file. - -Input: - - NONE - -Return: - - NONE ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -{ - UINTN OptionFlag; - UINT64 StringValue; - - OptionFlag = 0; - TokenStr = OrgStrTokPtr; - - while (*TokenStr != NULL) { - if (stricmp (*TokenStr, "[options]") == 0) { - OptionFlag = 1; - } - - if (OptionFlag) { - if (stricmp (*TokenStr, "EFI_FV_BASE_ADDRESS") == 0) { - *TokenStr++; - if (AsciiStringToUint64 (*TokenStr, FALSE, &StringValue) != EFI_SUCCESS) { - printf ("\nERROR: Cannot determine the FV base address."); - return ; - } - (*FvInfo)->FvBaseAddress = StringValue; - } else if (stricmp (*TokenStr, "EFI_FV_FILE_NAME") == 0) { - *TokenStr++; - strcpy ((*FvInfo)->FvFile, *TokenStr); - } - } - - TokenStr++; - } -} - -EFI_STATUS -GetFvRelatedInfoFromInfFile ( - IN CHAR8 *FileName - ) -/*++ - -Description: - - This function reads the input file, parse it and create a list of tokens - which is parsed and used, to intialize the data related to Firmware Volume. - -Input: - - FileName FileName which needed to be read to parse data - -Return: - - EFI_STATUS - ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: FileName - add argument and description to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - UINTN Index; - - Fp = fopen (FileName, "r"); - - if (Fp == NULL) { - printf ("Error in opening %s file\n", FileName); - return EFI_ABORTED; - } - - ValidLineCount (Fp); - - if (ValidLineNum == 0) { - printf ("\nFile doesn't contain any valid informations"); - return EFI_ABORTED; - } - - TokenStr = (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum)); - memset (TokenStr, 0, sizeof (UINTN) * (2 * ValidLineNum)); - OrgStrTokPtr = TokenStr; - - for (Index = 0; Index < (2 * ValidLineNum); Index++) { - *TokenStr = (CHAR8 *) malloc (sizeof (CHAR8) * FILE_NAME_SIZE); - memset (*TokenStr, 0, FILE_NAME_SIZE); - TokenStr++; - } - - *TokenStr = NULL; - TokenStr = OrgStrTokPtr; - fseek (Fp, 0L, SEEK_SET); - - ParseInputFile (Fp); - InitializeInFileInfo (); - - if (Fp) { - fclose (Fp); - } - - return EFI_SUCCESS; -} - -EFI_STATUS -WriteFwBinary ( - IN CHAR8 *FileName, - IN UINT64 StartAddress, - IN UINT64 Size, - IN UINT8 *Buffer - ) -/*++ - -Description: - - This function reads the input file, parse it and create a list of tokens - which is parsed and used, to intialize the data related to Firmware Volume. - -Input: - - FileName FileName which needed to be read to parse data - StartAddress This will set the file position. - Size Size in bytes needed to be written - Buffer Buffer needed to e written - -Return: - - EFI_STATUS - ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: FileName - add argument and description to function comment -// GC_TODO: StartAddress - add argument and description to function comment -// GC_TODO: Size - add argument and description to function comment -// GC_TODO: Buffer - add argument and description to function comment -// GC_TODO: EFI_INVALID_PARAMETER - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - UINTN NumByte; - - Fp = fopen (FileName, "a+b"); - - if (Fp == NULL) { - printf ("\nERROR:Error in opening file %s ", FileName); - return EFI_INVALID_PARAMETER; - } - - fseek (Fp, (UINTN) StartAddress, SEEK_SET); - NumByte = fwrite ((VOID *) Buffer, sizeof (UINT8), (UINTN) Size, Fp); - - // - // Check to ensure that buffer has been copied successfully - // - if (NumByte != Size) { - printf ("\nERROR: Error in copying the buffer into file"); - return EFI_ABORTED; - } - - if (Fp) { - fclose (Fp); - } - - return EFI_SUCCESS; -} - -EFI_STATUS -BuildFirmwareDeviceBinaryFromFwVolumes ( - IN UINT64 FvBaseAddress, - IN CHAR8 *FvFileName, - IN CHAR8 *FdFileName - ) -/*++ - -Description: - - This function reads the input file, parse it and create a list of tokens - which is parsed and used, to intialize the data related to Firmware Volume. - -Input: - - FvBaseAddress Base Address. This info is retrieved from INF file - FvFileName InputFileName - FdFileName Output File Name - -Return: - - EFI_STATUS - ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: FvBaseAddress - add argument and description to function comment -// GC_TODO: FvFileName - add argument and description to function comment -// GC_TODO: FdFileName - add argument and description to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - UINT64 FileSize; - UINT64 NumByteRead; - UINT64 PadByteSize; - UINTN Index; - UINT64 BaseAddress; - UINT8 *Buffer; - EFI_STATUS Status; - static UINT64 StartAddress = 0; - - Fp = fopen (FvFileName, "r+b"); - - if (Fp == NULL) { - printf ("\nERROR:Error in opening file %s", FvFileName); - return EFI_ABORTED; - } - - BaseAddress = FdInfo->FdBaseAddress; - - // - // Check if Base Address of Firmware Volume falls below the Base Address - // Firmware Device, if yes, then abort this process. - // - if (FvBaseAddress < BaseAddress) { - printf ("\nERROR: Firmware Volume Base Address falls below Firmware Device Address.\n"); - return EFI_ABORTED; - } - // - // Check if there are any hole between two Firmware Volumes. If any hole - // exists, fill the hole with PadByte data. - // - if (FvBaseAddress > LastAddress) { - PadByteSize = (FvBaseAddress - LastAddress); - Buffer = malloc ((UINTN) PadByteSize); - - for (Index = 0; Index < PadByteSize; Index++) { - *Buffer = FdInfo->PadValue; - Buffer++; - } - - Buffer -= PadByteSize; - Status = WriteFwBinary (FdFileName, StartAddress, (UINT64) PadByteSize, Buffer); - - if (Buffer) { - free (Buffer); - } - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error in writing the binary image to file"); - return Status; - } - - StartAddress += PadByteSize; - LastAddress += PadByteSize; - } - // - // Proceed with next Firmware Volume updates - // - FileSize = _filelength (fileno (Fp)); - - if ((FvBaseAddress + FileSize) > (FdInfo->FdBaseAddress + FdInfo->FdSize)) { - printf ( - "\nERROR:Unable to update Firmware Device. File %s is larger than \ - available space.", - FvFileName - ); - if (Fp) { - fclose (Fp); - } - - return EFI_ABORTED; - } - - Buffer = malloc ((UINTN) FileSize); - - if (Buffer == NULL) { - printf ("Error in allocating buffer to read specific file\n"); - return EFI_OUT_OF_RESOURCES; - } - - NumByteRead = fread ((VOID *) Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); - - Status = WriteFwBinary (FdFileName, StartAddress, FileSize, Buffer); - - if (Buffer) { - free ((VOID *) Buffer); - } - - if (Fp) { - fclose (Fp); - } - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error in writing the binary image to file"); - return Status; - } - - StartAddress += NumByteRead; - LastAddress += FileSize; - - return EFI_SUCCESS; -} - -VOID -CleanUpMemory ( - VOID - ) -/*++ - -Description: - - This function cleans up any allocated buffer - -Input: - - NONE - -Return: - - NONE ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -{ - UINTN Index; - - if (FdInfo) { - free (FdInfo); - } - - FvInfo = OrgFvInfoPtr; - - if (FvInfo) { - for (Index = 0; Index < NumFvFiles; Index++) { - if (*FvInfo) { - free (*FvInfo); - } - - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - free (FvInfo); - } -} - -GEN_FD_IMAGE_API -EFI_STATUS -GenerateFdImage ( - IN UINT64 BaseAddress, - IN UINT64 Size, - IN UINT8 PadByte, - IN CHAR8 *OutFile, - IN CHAR8 **FileList - ) -/*++ - -Description: - - This function reads the input file, parse it and create a list of tokens - which is parsed and used, to intialize the data related to Firmware Volume. - -Input: - - BaseAddress Base Address for this Firmware Device - Size, Total Size of the Firmware Device - PadByte Pad byte data - OutFile Output File Name - FileList File List pointer to INF file names. - -Return: - - EFI_STATUS - ---*/ -// GC_TODO: function comment is missing 'Routine Description:' -// GC_TODO: function comment is missing 'Arguments:' -// GC_TODO: function comment is missing 'Returns:' -// GC_TODO: BaseAddress - add argument and description to function comment -// GC_TODO: Size - add argument and description to function comment -// GC_TODO: PadByte - add argument and description to function comment -// GC_TODO: OutFile - add argument and description to function comment -// GC_TODO: FileList - add argument and description to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - EFI_STATUS Status; - UINTN Index; - UINTN PadSize; - UINTN FileSize; - CHAR8 **InFile; - FILE *Fp; - UINT8 *Buffer; - UINTN NumByte; - - // - // Ensure, if there are any previous Firmware Device exists, - // If yes, make it to 0 bytes - // - if ((Fp = fopen (OutFile, "w")) != NULL) { - fclose (Fp); - } - - InFile = FileList; - - while (*InFile != NULL) { - NumFvFiles++; - InFile++; - } - - InitializeComps (); - - // - // Restore the orginal pointers - // - FvInfo = OrgFvInfoPtr; - InFile = FileList; - - while (*InFile != NULL) { - strcpy ((*FvInfo)->FvInfoFile, *InFile); - Status = GetFvRelatedInfoFromInfFile (*InFile); - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error occurred in processsing INF file"); - CleanUpMemory (); - return Status; - } - - InFile++; - FvInfo++; - } - - FdInfo->FdSize = Size; - FdInfo->FdBaseAddress = BaseAddress; - FdInfo->PadValue = PadByte; - FvInfo = OrgFvInfoPtr; - strcpy (FdInfo->OutFileName, OutFile); - - for (Index = 0; Index < NumFvFiles; Index++) { - Status = GenerateFvImage ((*FvInfo)->FvInfoFile); - - if (Status != EFI_SUCCESS) { - CleanUpMemory (); - return Status; - } - - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - - // - // Sort the Firmware Volume informations. Firmware Volume with lower - // base addresses will be processed first and hiher base address one - // will be processed later. - // - qsort ((VOID *) FvInfo, NumFvFiles, sizeof (FVINFO *), CompareItems); - - LastAddress = (*FvInfo)->FvBaseAddress; - - for (Index = 0; Index < NumFvFiles; Index++) { - Status = BuildFirmwareDeviceBinaryFromFwVolumes ( - (*FvInfo)->FvBaseAddress, - (*FvInfo)->FvFile, - FdInfo->OutFileName - ); - if (Status != EFI_SUCCESS) { - CleanUpMemory (); - return Status; - } - - FvInfo++; - } - // - // Check if any space left after copying data from all Firmware Volumes - // If yes, then fill those location with PadValue. - // - if ((FdInfo->FdBaseAddress + Size) > LastAddress) { - - PadSize = (UINTN) ((FdInfo->FdBaseAddress + FdInfo->FdSize) - LastAddress); - Buffer = malloc (PadSize); - - if (Buffer == NULL) { - CleanUpMemory (); - return EFI_OUT_OF_RESOURCES; - } - - for (Index = 0; Index < PadSize; Index++) { - *Buffer = FdInfo->PadValue; - Buffer++; - } - - Buffer -= PadSize; - - Fp = fopen (OutFile, "a+b"); - - if (Fp == NULL) { - printf ("\nERROR:Opening file %s", OutFile); - CleanUpMemory (); - return EFI_ABORTED; - } - - FileSize = _filelength (fileno (Fp)); - fseek (Fp, FileSize, SEEK_SET); - NumByte = fwrite (Buffer, sizeof (UINT8), PadSize, Fp); - - if (Buffer) { - free (Buffer); - } - - fclose (Fp); - - if (NumByte != (sizeof (UINT8) * PadSize)) { - printf ("\nERROR: Copying data from buffer to File %s ", OutFile); - CleanUpMemory (); - return EFI_ABORTED; - } - } - // - // Clean up all the memory which has been allocated so far. - // - CleanUpMemory (); - return EFI_SUCCESS; -} diff --git a/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.c b/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.c deleted file mode 100644 index 9c56d061bc..0000000000 --- a/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.c +++ /dev/null @@ -1,330 +0,0 @@ -/*++ - -Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved -This software and associated documentation (if any) is furnished -under a license and may only be used or copied in accordance -with the terms of the license. Except as permitted by such -license, no part of this software or documentation may be -reproduced, stored in a retrieval system, or transmitted in any -form or by any means without the express written consent of -Intel Corporation. - - -Module Name: - - GenFdImageExe.c - -Abstract: - - This contains all code necessary to build the GenFdImage.exe utility. - This utility relies heavily on the GenFdImage Lib. Definitions for both - can be found in the GenFdImage Utility Specification, review draft. - ---*/ - -// -// Coded to EFI 2.0 Coding Standards -// -// -// Include files -// -#include "GenFdImage.h" -#include "GenFdImageExe.h" - -VOID -PrintUtilityInfo ( - VOID - ) -/*++ - -Routine Description: - - Displays the standard utility information to SDTOUT - -Arguments: - - None - -Returns: - - None - ---*/ -{ - printf ( - "%s, EFI 2.0 Firmware Device Image Generation Utility. ""Version %i.%i, %s.\n\n", - UTILITY_NAME, - UTILITY_MAJOR_VERSION, - UTILITY_MINOR_VERSION, - UTILITY_DATE - ); -} - -VOID -PrintUsage ( - VOID - ) -/*++ - -Routine Description: - - Displays the utility usage syntax to STDOUT - -Arguments: - - None - -Returns: - - None - ---*/ -{ - printf ( - "Usage: %s -B BaseAddress -S Size -F FillByte"" [-I FvInfFileName] -O OutputFileName \n", - UTILITY_NAME - ); - printf (" Where:\n"); - printf ("\tBaseAddress is the starting address of the FD Image\n\n"); - printf ("\tSize is the size of the FD Image.\n\n"); - printf ("\tFillByte is the desired value of free space in the Image\n\n"); - printf ("\tFvInfFileName is the name of an FV Image description file.\n\n"); - printf ("\tOutputFileName is the desired output file name.\n\n"); -} - -EFI_STATUS -main ( - IN INTN argc, - IN CHAR8 **argv - ) -/*++ - -Routine Description: - - This utility uses GenFdImage.lib to build a Firmware Device Image - which will include several Firmware Volume Images. - -Arguments: - - Base Address Base Address of the firmware volume.. - Size Size of the Firmware Volume - FillByte The byte value which would be needed to pad - between various Firmware Volumes - FvInfFile Fv inf file - OutputFileName The name of output file which would be created - -Returns: - - EFI_SUCCESS No error conditions detected. - EFI_INVALID_PARAMETER One or more of the input parameters is invalid. - EFI_OUT_OF_RESOURCES A resource required by the utility was unavailable. - Most commonly this will be memory allocation or - file creation. - EFI_LOAD_ERROR GenFvImage.lib could not be loaded. - EFI_ABORTED Error executing the GenFvImage lib. - ---*/ -// GC_TODO: argc - add argument and description to function comment -// GC_TODO: argv - add argument and description to function comment -{ - UINTN Index; - UINTN FvFilesCount; - - UINT8 i; - - UINT64 StartAddress; - UINT64 Size; - UINT64 FillByteVal; - - CHAR8 **FvInfFileList; - CHAR8 **OrgFvInfFileList; - CHAR8 OutputFileName[_MAX_PATH]; - - EFI_STATUS Status; - - INTN arg_counter; - - // - // Echo for makefile debug - // - printf ("\n\n"); - for (arg_counter = 0; arg_counter < argc; arg_counter++) { - printf ("%s ", argv[arg_counter]); - } - - printf ("\n\n"); - - // - // Display utility information - // - PrintUtilityInfo (); - - // - // Verify the correct number of arguments - // - if (argc < MIN_ARGS) { - printf ("ERROR: missing 1 or more input arguments.\n\n"); - PrintUsage (); - return EFI_INVALID_PARAMETER; - } - // - // Initialize variables - // - StartAddress = 0; - Size = 0; - FillByteVal = 0; - FvFilesCount = 0; - - for (i = 1; i < argc; i++) { - if (stricmp (argv[i], "-I") == 0) { - FvFilesCount++; - } - } - - FvInfFileList = malloc (sizeof (UINTN) * (FvFilesCount + 1)); - if (FvInfFileList == NULL) { - printf ("ERROR: allocating memory for FvInfFileList in -main- function.\n"); - return EFI_OUT_OF_RESOURCES; - } - - memset (FvInfFileList, 0, sizeof (UINTN) * (FvFilesCount + 1)); - - OrgFvInfFileList = FvInfFileList; - - for (Index = 0; Index < FvFilesCount; Index++) { - *FvInfFileList = malloc (_MAX_PATH); - memset (*FvInfFileList, 0, _MAX_PATH); - FvInfFileList++; - } - - strcpy (OutputFileName, ""); - - // - // Parse the command line arguments - // - FvInfFileList = OrgFvInfFileList; - - for (i = 1; i < argc; i += 2) { - // - // Make sure argument pair begin with - or / - // - if (argv[i][0] != '-' && argv[i][0] != '/') { - PrintUsage (); - printf ("ERROR: Argument pair must begin with \"-\" or \"/\"\n"); - return EFI_INVALID_PARAMETER; - } - // - // Make sure argument specifier is only one letter - // - if (argv[i][2] != 0) { - PrintUsage (); - printf ("ERROR: Unrecognized argument \"%s\".\n", argv[i]); - return EFI_INVALID_PARAMETER; - } - // - // Determine argument to read - // - switch (argv[i][1]) { - - case 'I': - case 'i': - if ((FvInfFileList != NULL) && (strlen (*FvInfFileList) == 0)) { - strcpy (*FvInfFileList, argv[i + 1]); - FvInfFileList++; - } else { - printf ("ERROR: FvInfFile Name is more than specifed.\n"); - return EFI_INVALID_PARAMETER; - } - break; - - case 'O': - case 'o': - if (strlen (OutputFileName) == 0) { - strcpy (OutputFileName, argv[i + 1]); - } else { - PrintUsage (); - printf ("ERROR: OutputFileName may only be specified once.\n"); - return EFI_INVALID_PARAMETER; - } - break; - - case 'B': - case 'b': - Status = AsciiStringToUint64 (argv[i + 1], FALSE, &StartAddress); - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Bad FD Image start address specified"); - return EFI_INVALID_PARAMETER; - } - break; - - case 'S': - case 's': - Status = AsciiStringToUint64 (argv[i + 1], FALSE, &Size); - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Bad FD Image size specified"); - return EFI_INVALID_PARAMETER; - } - break; - - case 'F': - case 'f': - Status = AsciiStringToUint64 (argv[i + 1], FALSE, &FillByteVal); - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Not a recognized Fill Byte value"); - return EFI_INVALID_PARAMETER; - } - break; - - default: - PrintUsage (); - printf ("ERROR: Unrecognized argument \"%s\".\n", argv[i]); - return EFI_INVALID_PARAMETER; - break; - } - } - // - // Call the GenFdImage Lib - // - FvInfFileList = OrgFvInfFileList; - - Status = GenerateFdImage ( - StartAddress, - Size, - (UINT8) FillByteVal, - OutputFileName, - FvInfFileList - ); - - if (EFI_ERROR (Status)) { - switch (Status) { - - case EFI_INVALID_PARAMETER: - printf ("\nERROR: Invalid parameter passed to GenFdImage lib.\n"); - break; - - case EFI_ABORTED: - printf ("\nERROR: Error detected while creating the file image.\n"); - break; - - case EFI_OUT_OF_RESOURCES: - printf ("\nERROR: GenFdImage Lib could not allocate required resources.\n"); - break; - - case EFI_VOLUME_CORRUPTED: - printf ("\nERROR: No base address was specified \n"); - break; - - case EFI_LOAD_ERROR: - printf ("\nERROR: An error occurred loading one of the required support Lib.\n"); - break; - - default: - printf ("\nERROR: GenFdImage lib returned unknown status %X.\n", Status); - break; - } - - return Status; - } - - return EFI_SUCCESS; -} diff --git a/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.h b/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.h deleted file mode 100644 index e07cb237c2..0000000000 --- a/Tools/Source/TianoTools/GenFdImage/GenFdImageExe.h +++ /dev/null @@ -1,91 +0,0 @@ -/*++ - -Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved -This software and associated documentation (if any) is furnished -under a license and may only be used or copied in accordance -with the terms of the license. Except as permitted by such -license, no part of this software or documentation may be -reproduced, stored in a retrieval system, or transmitted in any -form or by any means without the express written consent of -Intel Corporation. - - -Module Name: - - GenFdImageExe.h - -Abstract: - - Definitions for the Boot Strap File Image generation utility. - ---*/ - -#ifndef _EFI_GEN_FD_IMAGE_EXE_H -#define _EFI_GEN_FD_IMAGE_EXE_H - -// -// Utility Name -// -#define UTILITY_NAME "GenFdImage" - -// -// Utility version information -// -#define UTILITY_MAJOR_VERSION 0 -#define UTILITY_MINOR_VERSION 0 -#define UTILITY_DATE __DATE__ - -// -// The maximum number of arguments accepted from the command line. -// -#define MIN_ARGS 10 - -// -// The function that displays general utility information -// -VOID -PrintUtilityInfo ( - VOID - ) -/*++ - -Routine Description: - - GC_TODO: Add function description - -Arguments: - - None - -Returns: - - GC_TODO: add return values - ---*/ -; - -// -// The function that displays the utility usage message. -// -VOID -PrintUsage ( - VOID - ) -/*++ - -Routine Description: - - GC_TODO: Add function description - -Arguments: - - None - -Returns: - - GC_TODO: add return values - ---*/ -; - -#endif diff --git a/Tools/Source/TianoTools/GenFdImage/GenFdImageLib.c b/Tools/Source/TianoTools/GenFdImage/GenFdImageLib.c deleted file mode 100644 index 39698d9abe..0000000000 --- a/Tools/Source/TianoTools/GenFdImage/GenFdImageLib.c +++ /dev/null @@ -1,848 +0,0 @@ -/*++ - -Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved -This software and associated documentation (if any) is furnished -under a license and may only be used or copied in accordance -with the terms of the license. Except as permitted by such -license, no part of this software or documentation may be -reproduced, stored in a retrieval system, or transmitted in any -form or by any means without the express written consent of -Intel Corporation. - - -Module Name: - - GenFdImageLib.C - -Abstract: - - This file contains the functions required to generate - the Firmware Device - ---*/ - -// -// Coded to EFI 2.0 Coding Standards -// -// -// Include file in build -// -#include "GenFdImage.h" - -// -// Global declarations -// -UINTN ValidLineNum = 0; -UINTN NumFvFiles = 0; - -static UINT64 LastAddress = 0; - -CHAR8 **TokenStr; -CHAR8 **OrgStrTokPtr; - -FDINFO *FdInfo; -FDINFO *OrgFdInfoPtr; - -FVINFO **FvInfo; -FVINFO **OrgFvInfoPtr; - -// -// Internal Functions -// -INTN -CompareItems ( - IN const VOID *Arg1, - IN const VOID *Arg2 - ) -/*++ - -Routine Description: - - This function is used by qsort to sort the Fv list based on FvBaseAddress - -Arguments: - - Arg1 - Arg2 - -Returns: - - None - ---*/ -// GC_TODO: Arg1 - add argument and description to function comment -// GC_TODO: Arg2 - add argument and description to function comment -{ - if ((*(FVINFO **) Arg1)->FvBaseAddress > (*(FVINFO **) Arg2)->FvBaseAddress) { - return 1; - } else if ((*(FVINFO **) Arg1)->FvBaseAddress < (*(FVINFO **) Arg2)->FvBaseAddress) { - return -1; - } else { - return 0; - } -} - -VOID -BuildTokenList ( - IN CHAR8 *Token - ) -/*++ - -Routine Description: - - This function builds the token list in an array which will be parsed later - -Arguments: - - Token String, - -Returns: - - None - ---*/ -{ - strcpy (*TokenStr, Token); - TokenStr++; -} - -VOID -TrimLine ( - IN CHAR8 *Line - ) -/*++ - -Routine Description: - - This function cleans up the line by removing all whitespace and - comments. - -Arguments: - - Line String, - -Returns: - - None - ---*/ -{ - CHAR8 TmpLine[FILE_NAME_SIZE]; - CHAR8 c; - CHAR8 *Ptr0; - - UINTN i; - UINTN j; - - // - // Change '#' to '//' for Comment style - // - // if((Ptr0=strchr(Line, '#')) != NULL) { - // - if ((Ptr0 = strstr (Line, "//")) != NULL) { - Line[Ptr0 - Line] = 0; - } - - i = 0; - j = 0; - while ((c = Line[i]) != 0) { - if ((c != ' ') && (c != '\t') && (c != '\n')) { - TmpLine[j++] = c; - } - - i++; - } - - TmpLine[j] = 0; - strcpy (Line, TmpLine); -} - -VOID -ValidLineCount ( - IN FILE *Fp - ) -/*++ - -Routine Description: - - This function calculates number of valid lines in a input file. - -Arguments: - - Fp Pointer to a file handle which has been opened. - -Returns: - - None - ---*/ -{ - CHAR8 Buff[FILE_NAME_SIZE]; - - while (fgets (Buff, sizeof (Buff), Fp)) { - TrimLine (Buff); - if (Buff[0] == 0) { - continue; - } - - ValidLineNum++; - } -} - -VOID -ParseInputFile ( - IN FILE *Fp - ) -/*++ - -Routine Description: - - This function parses the input file and tokenizes the string - -Arguments: - - Fp Pointer to a file handle which has been opened. - -Returns: - - None - ---*/ -{ - CHAR8 *Token; - CHAR8 Buff[FILE_NAME_SIZE]; - CHAR8 OrgLine[FILE_NAME_SIZE]; - CHAR8 Str[FILE_NAME_SIZE]; - CHAR8 Delimit[] = "="; - - while (fgets (Buff, sizeof (Buff), Fp) != NULL) { - strcpy (OrgLine, Buff); - TrimLine (Buff); - - if (Buff[0] == 0) { - continue; - } - - Token = strtok (Buff, Delimit); - - while (Token != NULL) { - strcpy (Str, Token); - BuildTokenList (Str); - Token = strtok (NULL, Delimit); - } - } -} - -EFI_STATUS -InitializeComps ( - VOID - ) -/*++ - -Routine Description: - - This function intializes the relevant global variable - used to store the information retrieved from the INF file. - -Arguments: - - None - -Returns: - - EFI_STATUS - ---*/ -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - UINTN Index; - - FdInfo = malloc (sizeof (FDINFO)); - - if (FdInfo == NULL) { - printf ("ERROR: allocating memory (struct FDINFO) in"" function InitializeComps.\n"); - return EFI_OUT_OF_RESOURCES; - } - - OrgFdInfoPtr = FdInfo; - - FvInfo = malloc (sizeof (INTN) * NumFvFiles); - - if (FvInfo == NULL) { - printf ("ERROR: allocating memory (INTN * NumFvFiles) in"" function InitializeComps.\n"); - return EFI_OUT_OF_RESOURCES; - } - - OrgFvInfoPtr = FvInfo; - - for (Index = 0; Index < NumFvFiles; Index++) { - *FvInfo = malloc (sizeof (FVINFO)); - - if (*FvInfo == NULL) { - printf ("ERROR: allocating memory (FVINFO) in"" function InitializeComps.\n"); - return EFI_OUT_OF_RESOURCES; - } - - memset (*FvInfo, 0, sizeof (FVINFO)); - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - - return EFI_SUCCESS; -} - -VOID -InitializeInFileInfo ( - VOID - ) -/*++ - -Routine Description: - - This function intializes the relevant global variable - used to store the information retrieved from the INF file. - -Arguments: - - None - -Returns: - - None - ---*/ -{ - UINTN OptionFlag; - - UINT64 StringValue; - - OptionFlag = 0; - TokenStr = OrgStrTokPtr; - - while (*TokenStr != NULL) { - if (stricmp (*TokenStr, "[options]") == 0) { - OptionFlag = 1; - } - - if (OptionFlag) { - if (stricmp (*TokenStr, "EFI_FV_BASE_ADDRESS") == 0) { - *TokenStr++; - if (AsciiStringToUint64 ( - *TokenStr, - FALSE, - &StringValue - ) != EFI_SUCCESS) { - printf ("\nERROR: Cannot determine the FV base address."); - return ; - } - (*FvInfo)->FvBaseAddress = StringValue; - } else if (stricmp (*TokenStr, "EFI_FV_FILE_NAME") == 0) { - *TokenStr++; - strcpy ((*FvInfo)->FvFile, *TokenStr); - } - } - - TokenStr++; - } -} - -EFI_STATUS -GetFvRelatedInfoFromInfFile ( - IN CHAR8 *FileName - ) -/*++ - -Routine Description: - - This function reads the input file, parses it and create a list of tokens - which are parsed and used, to intialize the data related to the Firmware - Volume. - -Arguments: - - FileName FileName which needed to be read to parse data - -Returns: - - EFI_STATUS - ---*/ -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - - UINTN Index; - - Fp = fopen (FileName, "r"); - - if (Fp == NULL) { - printf ("Error in opening %s file\n", FileName); - return EFI_ABORTED; - } - - ValidLineCount (Fp); - - if (ValidLineNum == 0) { - printf ("\nFile doesn't contain any valid informations"); - return EFI_ABORTED; - } - - TokenStr = (CHAR8 **) malloc (sizeof (UINTN) * (2 * ValidLineNum)); - memset (TokenStr, 0, sizeof (UINTN) * (2 * ValidLineNum)); - OrgStrTokPtr = TokenStr; - - for (Index = 0; Index < (2 * ValidLineNum); Index++) { - *TokenStr = (CHAR8 *) malloc (sizeof (CHAR8) * FILE_NAME_SIZE); - memset (*TokenStr, 0, FILE_NAME_SIZE); - TokenStr++; - } - - *TokenStr = NULL; - TokenStr = OrgStrTokPtr; - fseek (Fp, 0L, SEEK_SET); - - ParseInputFile (Fp); - InitializeInFileInfo (); - - if (Fp) { - fclose (Fp); - } - - return EFI_SUCCESS; -} - -EFI_STATUS -WriteFwBinary ( - IN CHAR8 *FileName, - IN UINT64 StartAddress, - IN UINT64 Size, - IN UINT8 *Buffer - ) -/*++ - -Routine Description: - - This function reads the input file, parses it and creates a list of tokens - which are parsed and used to intialize the data related to the Firmware - Volume. - -Arguments: - - FileName FileName which needed to be read to parse data - StartAddress This will set the file position. - Size Size in bytes needed to be written - Buffer Buffer needed to e written - -Returns: - - EFI_STATUS - ---*/ -// GC_TODO: EFI_INVALID_PARAMETER - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - - UINTN NumByte; - - Fp = fopen (FileName, "a+b"); - - if (Fp == NULL) { - printf ("\nERROR:Error in opening file %s ", FileName); - return EFI_INVALID_PARAMETER; - } - - fseek (Fp, (UINTN) StartAddress, SEEK_SET); - NumByte = fwrite ((VOID *) Buffer, sizeof (UINT8), (UINTN) Size, Fp); - - // - // Check to ensure that buffer has been copied successfully - // - if (NumByte != Size) { - printf ("\nERROR: Error in copying the buffer into file"); - return EFI_ABORTED; - } - - if (Fp) { - fclose (Fp); - } - - return EFI_SUCCESS; -} - -EFI_STATUS -BuildFirmwareDeviceBinaryFromFwVolumes ( - IN UINT64 FvBaseAddress, - IN CHAR8 *FvFileName, - IN CHAR8 *FdFileName - ) -/*++ - -Routine Description: - - This function reads the input file, parses it and creates a list of tokens - which are parsed and used to intialize the data related to the Firmware - Volume. - -Arguments: - - FvBaseAddress Base Address. This info is retrieved from INF file - FvFileName InputFileName - FdFileName Output File Name - -Returns: - - EFI_STATUS - ---*/ -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - FILE *Fp; - - UINT64 FileSize; - UINT64 NumByteRead; - UINT64 PadByteSize; - UINT64 BaseAddress; - - UINTN Index; - - UINT8 *Buffer; - - EFI_STATUS Status; - - static UINT64 StartAddress = 0; - - Fp = fopen (FvFileName, "r+b"); - - if (Fp == NULL) { - printf ("\nERROR:Error in opening file %s", FvFileName); - return EFI_ABORTED; - } - - BaseAddress = FdInfo->FdBaseAddress; - - // - // Check if Base Address of Firmware Volume falls below the Base Address - // Firmware Device, if yes, then abort this process. - // - if (FvBaseAddress < BaseAddress) { - printf ("\nERROR: Firmware Volume Base Address falls below Firmware ""Device Address.\n"); - return EFI_ABORTED; - } - // - // Check if there are any holes between two Firmware Volumes. If any holes - // exist, fill the hole with PadByted data. - // - if (FvBaseAddress > LastAddress) { - PadByteSize = (FvBaseAddress - LastAddress); - Buffer = malloc ((UINTN) PadByteSize); - if (Buffer == NULL) { - printf ("ERROR: allocating (Buffer) memory in"" function BuildFirmwareDeviceBinaryFromFwVolumes.\n"); - return EFI_OUT_OF_RESOURCES; - } - - for (Index = 0; Index < PadByteSize; Index++) { - *Buffer = FdInfo->PadValue; - Buffer++; - } - - Buffer -= PadByteSize; - Status = WriteFwBinary ( - FdFileName, - StartAddress, - (UINT64) PadByteSize, - Buffer - ); - - if (Buffer) { - free (Buffer); - } - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error in writing the binary image to file"); - return Status; - } - - StartAddress += PadByteSize; - LastAddress += PadByteSize; - } - // - // Proceed with next Firmware Volume updates - // - FileSize = _filelength (fileno (Fp)); - - if ((FvBaseAddress + FileSize) > (FdInfo->FdBaseAddress + FdInfo->FdSize)) { - printf ( - "\nERROR:Unable to update Firmware Device. File %s is larger than \ - available space.", - FvFileName - ); - if (Fp) { - fclose (Fp); - } - - return EFI_ABORTED; - } - - Buffer = malloc ((UINTN) FileSize); - - if (Buffer == NULL) { - printf ("Error in allocating buffer to read specific file\n"); - return EFI_OUT_OF_RESOURCES; - } - - NumByteRead = fread ((VOID *) Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); - - Status = WriteFwBinary (FdFileName, StartAddress, FileSize, Buffer); - - if (Buffer) { - free ((VOID *) Buffer); - } - - if (Fp) { - fclose (Fp); - } - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error in writing the binary image to file"); - return Status; - } - - StartAddress += NumByteRead; - LastAddress += FileSize; - - return EFI_SUCCESS; -} - -VOID -CleanUpMemory ( - VOID - ) -/*++ - -Routine Description: - - This function cleans up any allocated buffer - -Arguments: - - None - -Returns: - - None - ---*/ -{ - UINTN Index; - - if (FdInfo) { - free (FdInfo); - } - - FvInfo = OrgFvInfoPtr; - - if (FvInfo) { - for (Index = 0; Index < NumFvFiles; Index++) { - if (*FvInfo) { - free (*FvInfo); - } - - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - free (FvInfo); - } -} - -EFI_STATUS -GenerateFdImage ( - IN UINT64 BaseAddress, - IN UINT64 Size, - IN UINT8 PadByte, - IN CHAR8 *OutFile, - IN CHAR8 **FileList - ) -/*++ - -Routine Description: - - This function reads the input file, parses it and creates a list of tokens - which are parsed and used to intialize the data related to the Firmware - Volume. - -Arguments: - - BaseAddress Base Address for this Firmware Device - Size, Total Size of the Firmware Device - PadByte Pad byte data - OutFile Output File Name - FileList File List pointer to INF file names. - -Returns: - - EFI_STATUS - ---*/ -// GC_TODO: EFI_OUT_OF_RESOURCES - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_ABORTED - add return value to function comment -// GC_TODO: EFI_SUCCESS - add return value to function comment -{ - EFI_STATUS Status; - - UINTN Index; - UINTN PadSize; - UINTN FileSize; - UINTN NumByte; - - CHAR8 **InFile; - - FILE *Fp; - - UINT8 *Buffer; - - // - // If any previous Firmware Device existed, - // make it to 0 bytes - // - if ((Fp = fopen (OutFile, "w")) != NULL) { - fclose (Fp); - } - - InFile = FileList; - - while (*InFile != NULL) { - NumFvFiles++; - InFile++; - } - - InitializeComps (); - - // - // Restore the orginal pointers - // - FvInfo = OrgFvInfoPtr; - InFile = FileList; - - while (*InFile != NULL) { - strcpy ((*FvInfo)->FvInfoFile, *InFile); - Status = GetFvRelatedInfoFromInfFile (*InFile); - - if (Status != EFI_SUCCESS) { - printf ("\nERROR: Error occurred in processsing INF file"); - CleanUpMemory (); - return Status; - } - - InFile++; - FvInfo++; - } - - FdInfo->FdSize = Size; - FdInfo->FdBaseAddress = BaseAddress; - FdInfo->PadValue = PadByte; - FvInfo = OrgFvInfoPtr; - strcpy (FdInfo->OutFileName, OutFile); - - for (Index = 0; Index < NumFvFiles; Index++) { - Status = GenerateFvImage ((*FvInfo)->FvInfoFile); - - if (Status != EFI_SUCCESS) { - CleanUpMemory (); - return Status; - } - - FvInfo++; - } - - FvInfo = OrgFvInfoPtr; - - // - // Sort the Firmware Volume information. Firmware Volume with lower - // base addresses will be processed first and higher base address one - // will be processed later. - // - qsort ((VOID *) FvInfo, NumFvFiles, sizeof (FVINFO *), CompareItems); - - LastAddress = (*FvInfo)->FvBaseAddress; - - for (Index = 0; Index < NumFvFiles; Index++) { - Status = BuildFirmwareDeviceBinaryFromFwVolumes ( - (*FvInfo)->FvBaseAddress, - (*FvInfo)->FvFile, - FdInfo->OutFileName - ); - if (Status != EFI_SUCCESS) { - CleanUpMemory (); - return Status; - } - - FvInfo++; - } - // - // Check if any space left after copying data from all Firmware Volumes - // If yes, then fill those location with PadValue. - // - if ((FdInfo->FdBaseAddress + Size) > LastAddress) { - - PadSize = (UINTN) ((FdInfo->FdBaseAddress + FdInfo->FdSize) - LastAddress); - Buffer = malloc (PadSize); - - if (Buffer == NULL) { - printf ("\nERROR: allocating PadSize memory in function GenerateFdImage.\n"); - CleanUpMemory (); - return EFI_OUT_OF_RESOURCES; - } - - for (Index = 0; Index < PadSize; Index++) { - *Buffer = FdInfo->PadValue; - Buffer++; - } - - Buffer -= PadSize; - - Fp = fopen (OutFile, "a+b"); - - if (Fp == NULL) { - printf ("\nERROR:Opening file %s", OutFile); - CleanUpMemory (); - return EFI_ABORTED; - } - - FileSize = _filelength (fileno (Fp)); - fseek (Fp, FileSize, SEEK_SET); - NumByte = fwrite (Buffer, sizeof (UINT8), PadSize, Fp); - - if (Buffer) { - free (Buffer); - } - - fclose (Fp); - - if (NumByte != (sizeof (UINT8) * PadSize)) { - printf ("\nERROR: Copying data from buffer to File %s ", OutFile); - CleanUpMemory (); - return EFI_ABORTED; - } - } - // - // Clean up all the memory which has been allocated so far. - // - CleanUpMemory (); - - return EFI_SUCCESS; -}