/** @file\r
Utility program to create an EFI option ROM image from binary and EFI PE32 files.\r
\r
-Copyright (c) 1999 - 2017, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available \r
-under the terms and conditions of the BSD License which accompanies this \r
-distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
/*++\r
\r
Routine Description:\r
- \r
- Given an EFI image filename, create a ROM-able image by creating an option \r
+\r
+ Given an EFI image filename, create a ROM-able image by creating an option\r
ROM header and PCI data structure, filling them in, and then writing the\r
option ROM header + PCI data structure + EFI image out to the output file.\r
\r
} else if (mOptions.Debug) {\r
SetPrintLevel(DebugLevel);\r
}\r
- \r
+\r
if (mOptions.Verbose) {\r
VerboseMsg("%s tool start.\n", UTILITY_NAME);\r
}\r
- \r
+\r
//\r
// If dumping an image, then do that and quit\r
//\r
//\r
if (!mOptions.OutFileName[0]) {\r
if (mOptions.FileList != NULL) {\r
- strcpy (mOptions.OutFileName, mOptions.FileList->FileName);\r
+ if (strlen (mOptions.FileList->FileName) >= MAX_PATH) {\r
+ Status = STATUS_ERROR;\r
+ Error (NULL, 0, 2000, "Invalid parameter", "Input file name is too long - %s.", mOptions.FileList->FileName);\r
+ goto BailOut;\r
+ }\r
+ strncpy (mOptions.OutFileName, mOptions.FileList->FileName, MAX_PATH - 1);\r
+ mOptions.OutFileName[MAX_PATH - 1] = 0;\r
//\r
// Find the last . on the line and replace the filename extension with\r
// the default\r
VerboseMsg("%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());\r
}\r
\r
- return GetUtilityStatus (); \r
+ return GetUtilityStatus ();\r
}\r
\r
static\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Process a binary input file.\r
\r
Arguments:\r
UINT32 Index;\r
UINT8 ByteCheckSum;\r
UINT16 CodeType;\r
- \r
+\r
PciDs23 = NULL;\r
PciDs30 = NULL;\r
Status = STATUS_SUCCESS;\r
} else {\r
PciDs30->ImageLength = (UINT16) (TotalSize / 512);\r
CodeType = PciDs30->CodeType;\r
- }\r
+ }\r
\r
//\r
// If this is the last image, then set the LAST bit unless requested not\r
PciDs23->Indicator = INDICATOR_LAST;\r
} else {\r
PciDs30->Indicator = INDICATOR_LAST;\r
- }\r
+ }\r
} else {\r
if (mOptions.Pci23 == 1) {\r
PciDs23->Indicator = 0;\r
} else {\r
PciDs30->Indicator = 0;\r
- }\r
+ }\r
}\r
\r
if (CodeType != PCI_CODE_TYPE_EFI_IMAGE) {\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Process a PE32 EFI file.\r
\r
Arguments:\r
} else {\r
HeaderPadBytes = 0;\r
}\r
- \r
+\r
//\r
// For Pci3.0 to use the different data structure.\r
//\r
// Check size\r
//\r
if (TotalSize > MAX_OPTION_ROM_SIZE) {\r
- Error (NULL, 0, 2000, "Invalid", "Option ROM image %s size exceeds limit of 0x%X bytes.", InFile->FileName, MAX_OPTION_ROM_SIZE); \r
+ Error (NULL, 0, 2000, "Invalid", "Option ROM image %s size exceeds limit of 0x%X bytes.", InFile->FileName, MAX_OPTION_ROM_SIZE);\r
Status = STATUS_ERROR;\r
goto BailOut;\r
}\r
if ((InFile->Next == NULL) && (mOptions.NoLast == 0)) {\r
if (mOptions.Pci23 == 1) {\r
PciDs23.Indicator = INDICATOR_LAST;\r
- } else {\r
+ } else {\r
PciDs30.Indicator = INDICATOR_LAST;}\r
} else {\r
if (mOptions.Pci23 == 1) {\r
PciDs23.Indicator = 0;\r
- } else {\r
+ } else {\r
PciDs30.Indicator = 0;\r
}\r
}\r
Error (NULL, 0, 0002, "Failed to write PCI ROM header to output file!", NULL);\r
Status = STATUS_ERROR;\r
goto BailOut;\r
- } \r
+ }\r
} else {\r
if (fwrite (&PciDs30, sizeof (PciDs30), 1, OutFptr) != 1) {\r
Error (NULL, 0, 0002, "Failed to write PCI ROM header to output file!", NULL);\r
Status = STATUS_ERROR;\r
goto BailOut;\r
- } \r
+ }\r
}\r
\r
//\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Given a file pointer to a supposed PE32 image file, verify that it is indeed a\r
PE32 image file, and then return the machine type in the supplied pointer.\r
\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Given the Argc/Argv program arguments, and a pointer to an options structure,\r
parse the command-line options and check their validity.\r
\r
Usage ();\r
return STATUS_ERROR;\r
}\r
- \r
+\r
if ((stricmp(Argv[0], "-h") == 0) || (stricmp(Argv[0], "--help") == 0)) {\r
Usage();\r
return STATUS_ERROR;\r
}\r
- \r
+\r
if ((stricmp(Argv[0], "--version") == 0)) {\r
Version();\r
return STATUS_ERROR;\r
ReturnStatus = STATUS_ERROR;\r
goto Done;\r
}\r
- \r
+\r
//\r
// set flag and class code for this image.\r
//\r
} else {\r
if (PrevFileList == NULL) {\r
PrevFileList = FileList;\r
- } else { \r
+ } else {\r
PrevFileList->Next = FileList;\r
}\r
}\r
ReturnStatus = STATUS_ERROR;\r
goto Done;\r
}\r
- \r
+\r
if (!Options->DevIdCount) {\r
Error (NULL, 0, 2000, "Missing Device ID in command line", NULL);\r
ReturnStatus = STATUS_ERROR;\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Print version information for this utility.\r
\r
Arguments:\r
{\r
fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);\r
}\r
- \r
+\r
static\r
void\r
Usage (\r
/*++\r
\r
Routine Description:\r
- \r
+\r
Print usage information for this utility.\r
\r
Arguments:\r
// Summary usage\r
//\r
fprintf (stdout, "Usage: %s -f VendorId -i DeviceId [options] [file name<s>] \n\n", UTILITY_NAME);\r
- \r
+\r
//\r
// Copyright declaration\r
- // \r
- fprintf (stdout, "Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.\n\n");\r
+ //\r
+ fprintf (stdout, "Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.\n\n");\r
\r
//\r
// Details Option\r
fprintf (stdout, " -q, --quiet\n\\r
Disable all messages except FATAL ERRORS.\n");\r
fprintf (stdout, " --debug [#,0-9]\n\\r
- Enable debug messages at level #.\n"); \r
+ Enable debug messages at level #.\n");\r
}\r
\r
static\r
ImageCount = 0;\r
for (;;) {\r
//\r
- // Save our postition in the file, since offsets in the headers\r
+ // Save our position in the file, since offsets in the headers\r
// are relative to the particular image.\r
//\r
ImageStart = ftell (InFptr);\r
fprintf (stdout, " Device ID 0x%04X\n", PciDs30.DeviceId);\r
fprintf (stdout, " Length 0x%04X\n", PciDs30.Length);\r
fprintf (stdout, " Revision 0x%04X\n", PciDs30.Revision);\r
- fprintf (stdout, " DeviceListOffset 0x%02X\n", PciDs30.DeviceListOffset); \r
+ fprintf (stdout, " DeviceListOffset 0x%02X\n", PciDs30.DeviceListOffset);\r
if (PciDs30.DeviceListOffset) {\r
//\r
// Print device ID list\r
fprintf (stdout, " Code revision: 0x%04X\n", PciDs30.CodeRevision);\r
fprintf (stdout, " MaxRuntimeImageLength 0x%02X\n", PciDs30.MaxRuntimeImageLength);\r
fprintf (stdout, " ConfigUtilityCodeHeaderOffset 0x%02X\n", PciDs30.ConfigUtilityCodeHeaderOffset);\r
- fprintf (stdout, " DMTFCLPEntryPointOffset 0x%02X\n", PciDs30.DMTFCLPEntryPointOffset); \r
- fprintf (stdout, " Indicator 0x%02X", PciDs30.Indicator); \r
+ fprintf (stdout, " DMTFCLPEntryPointOffset 0x%02X\n", PciDs30.DMTFCLPEntryPointOffset);\r
+ fprintf (stdout, " Indicator 0x%02X", PciDs30.Indicator);\r
}\r
//\r
// Print the indicator, used to flag the last image\r
if (mOptions.Pci23 == 1) {\r
fprintf (stdout, " Code type 0x%02X", PciDs23.CodeType);\r
} else {\r
- fprintf (stdout, " Code type 0x%02X", PciDs30.CodeType); \r
+ fprintf (stdout, " Code type 0x%02X", PciDs30.CodeType);\r
}\r
if (PciDs23.CodeType == PCI_CODE_TYPE_EFI_IMAGE || PciDs30.CodeType == PCI_CODE_TYPE_EFI_IMAGE) {\r
fprintf (stdout, " (EFI image)\n");\r