From 63ae3b90ccf7774a50f4652488dbea1b1aac62cb Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Wed, 3 Aug 2016 11:26:38 +0800 Subject: BraswellPlatformPkg: Move Tools to Common/Tools Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang Reviewed-by: David Wei --- .../Common/Tools/GenBiosId/GenBiosId | Bin 0 -> 12236 bytes .../Common/Tools/GenBiosId/GenBiosId.c | 417 +++++++++++++++++++++ .../Common/Tools/GenBiosId/GenBiosId.exe | Bin 0 -> 384000 bytes .../Common/Tools/GenBiosId/GenBiosId.h | 147 ++++++++ .../Common/Tools/GenBiosId/Makefile | 24 ++ 5 files changed, 588 insertions(+) create mode 100644 BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId create mode 100644 BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.c create mode 100644 BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.exe create mode 100644 BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.h create mode 100644 BraswellPlatformPkg/Common/Tools/GenBiosId/Makefile (limited to 'BraswellPlatformPkg/Common/Tools/GenBiosId') diff --git a/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId new file mode 100644 index 0000000000..ef1578f2bc Binary files /dev/null and b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId differ diff --git a/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.c b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.c new file mode 100644 index 0000000000..5a99230eeb --- /dev/null +++ b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.c @@ -0,0 +1,417 @@ +/** @file + This tool generates the BIOS ID binary file using the data from the configuration file. + + Copyright (c) 1999 - 2015, 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 "GenBiosId.h" + +char InputFileName[FILE_NAME_SIZE]; +char OutputFileName[FILE_NAME_SIZE]; + +FILE *InputFile; +FILE *OutputFile; + +BIOS_ID_IMAGE BiosIdImage = { + { '$', 'I', 'B', 'I', 'O', 'S', 'I', '$' }, + { + { ATOU (' '), ATOU (' '), ATOU (' '), ATOU (' '), ATOU (' '), ATOU (' '), ATOU (' ') }, + ATOU (' '), + ATOU ('.'), + { ATOU (' '), ATOU (' '), ATOU (' ') }, + ATOU ('.'), + { ATOU ('0'), ATOU ('0'), ATOU ('0'), ATOU ('0') }, + ATOU ('.'), + ATOU (' '), + { ATOU ('0'), ATOU ('0') }, + ATOU ('.'), + { ATOU ('0'), ATOU ('0'), ATOU ('0'), ATOU ('0'), ATOU ('0'), + ATOU ('0'), ATOU ('0'), ATOU ('0'), ATOU ('0'), ATOU ('0') }, + ATOU ('\0') + } +}; + +/** + @param[in] argc Number of command-line arguments. + @param[in] argv Array of command-line arguments. + + @retval 0 The operation completed successfully. + @retval 1 An error occurred. + +**/ +INTN +main ( + IN INTN argc, + IN CHAR8 *argv[] + ) +{ + int Status; + + Status = 0; + + PrintBanner (); + + if (argc != 5) { + PrintUsage (); + Status = -1; + goto Done; + } + + if (strcmp (argv[1], "-i") == 0) { + strcpy (InputFileName, argv[2]); + } else { + PrintUsage (); + Status = -1; + goto Done; + } + + if (strcmp (argv[3], "-o") == 0) { + strcpy (OutputFileName, argv[4]); + } else { + PrintUsage (); + Status = -1; + goto Done; + } + + InputFile = NULL; + OutputFile = NULL; + + InputFile = fopen (InputFileName, "r"); + if (InputFile == NULL) { + printf ("Error opening input file: %s\n", InputFileName); + Status = -1; + goto Done; + } + + OutputFile = fopen (OutputFileName, "wb"); + if (OutputFile == NULL) { + printf ("Error creating output file: %s\n", OutputFileName); + fclose (InputFile); + Status = -1; + goto Done; + } + + if (ParseInputFile () != EFI_SUCCESS) { + printf ("Invalid config file format: %s\n", InputFileName); + Status = -1; + goto Done; + } + + if (WriteOutputFile () != EFI_SUCCESS) { + printf ("Can't write output file: %s\n", OutputFileName); + Status = -1; + goto Done; + } + + printf ("BIOS ID created: "); + PrintUnicodeString ((CHAR16 *)(&(BiosIdImage.BiosIdString))); + printf ("\n"); + printf ("BIOS ID binary file created: %s\n", OutputFileName); + +Done: + + if (InputFile != NULL) { + fclose (InputFile); + } + + if (OutputFile != NULL) { + fclose (OutputFile); + } + + return Status; +} + +/** + @param[in] None + +**/ +VOID +PrintBanner ( + VOID + ) +{ + printf ("\n"); + printf ("GenBiosId utility, version: v1.0 06/08/2005 \n"); + printf ("Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved. \n"); + printf ("\n"); +} + +/** + @param[in] None + +**/ +VOID +PrintUsage ( + VOID + ) +{ + printf ("Usage: \n"); + printf ("GenBiosId -i ConfigFile -o OutputFile \n"); + printf ("\n"); +} + +/** + Parse the BIOS ID definition file and fill the BIOS ID structure, including timestamp. + + @param[in] None + + @retval EFI_SUCCESS The input file was parsed successfully. + @retval EFI_INVALID_PARAMETER The input file has incorrect format. + +**/ +EFI_STATUS +ParseInputFile ( + VOID + ) +{ + CHAR8 StrLine[MAX_LINE_SIZE]; + CHAR8 StrFieldName[MAX_LINE_SIZE]; + CHAR8 StrFieldValue[MAX_LINE_SIZE]; + CHAR8 *Str; + UINT16 FieldsSet; + + FieldsSet = 0; + Str = NULL; + + while (fgets (StrLine, sizeof (StrLine) - 1, InputFile) != NULL) { + Str = StripLeadingWhiteSpace (StrLine); + + // + // Check for whitespace string. + // + if (Str == NULL) { + continue; + } + + // + // Check for comment string. + // + if (*Str == '#') { + continue; + } + + if (sscanf (Str, "%s = %s", StrFieldName, StrFieldValue) != 2) { + continue; + } + + if (strcmp (StrFieldName, NAME_BOARD_ID) == 0) { + if (strlen (StrFieldValue) == CHARS_BOARD_ID) { + ConvertToUnicode (StrFieldValue, BiosIdImage.BiosIdString.BoardId); + FieldsSet |= FIELD_BOARD_ID; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_BOARD_ID, CHARS_BOARD_ID); + return EFI_INVALID_PARAMETER; + } + } + + if (strcmp (StrFieldName, NAME_BOARD_REV) == 0) { + if (strlen (StrFieldValue) == CHARS_BOARD_REV) { + ConvertToUnicode (StrFieldValue, &(BiosIdImage.BiosIdString.BoardRev)); + FieldsSet |= FIELD_BOARD_REV; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_BOARD_REV, CHARS_BOARD_REV); + return EFI_INVALID_PARAMETER; + } + } + + if (strcmp (StrFieldName, NAME_OEM_ID) == 0) { + if (strlen (StrFieldValue) == CHARS_OEM_ID) { + ConvertToUnicode (StrFieldValue, BiosIdImage.BiosIdString.OemId); + FieldsSet |= FIELD_OEM_ID; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_OEM_ID, CHARS_OEM_ID); + return EFI_INVALID_PARAMETER; + } + } + + if (strcmp (StrFieldName, NAME_BUILD_TYPE) == 0) { + if (strlen (StrFieldValue) == CHARS_BUILD_TYPE) { + ConvertToUnicode (StrFieldValue, &(BiosIdImage.BiosIdString.BuildType)); + FieldsSet |= FIELD_BUILD_TYPE; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_BUILD_TYPE, CHARS_BUILD_TYPE); + return EFI_INVALID_PARAMETER; + } + } + + if (strcmp (StrFieldName, NAME_VERSION_MAJOR) == 0) { + if (strlen (StrFieldValue) == CHARS_VERSION_MAJOR) { + ConvertToUnicode (StrFieldValue, BiosIdImage.BiosIdString.VersionMajor); + FieldsSet |= FIELD_VERSION_MAJOR; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_VERSION_MAJOR, CHARS_VERSION_MAJOR); + return EFI_INVALID_PARAMETER; + } + } + + if (strcmp (StrFieldName, NAME_VERSION_MINOR) == 0) { + if (strlen (StrFieldValue) == CHARS_VERSION_MINOR) { + ConvertToUnicode (StrFieldValue, BiosIdImage.BiosIdString.VersionMinor); + FieldsSet |= FIELD_VERSION_MINOR; + } else { + printf ("Error: value of %s should have exactly %d chars\n", NAME_VERSION_MINOR, CHARS_VERSION_MINOR); + return EFI_INVALID_PARAMETER; + } + } + + } + + // + // Exit if not all fields were supplied. + // + if ((FieldsSet & FIELD_ALL) != FIELD_ALL) { + return EFI_INVALID_PARAMETER; + } + + // + // Fill the timestamp. + // + FillTimeStamp (BiosIdImage.BiosIdString.TimeStamp); + + return EFI_SUCCESS; +} + +/** + Write the BIOS ID structure to the output file. + + @param[in] + + @retval EFI_SUCCESS The output file was created successfully. + @retval EFI_DEVICE_ERROR There was a file write error. + +**/ +EFI_STATUS +WriteOutputFile ( + VOID + ) +{ + if (fwrite (&BiosIdImage, sizeof (BIOS_ID_IMAGE), 1, OutputFile) != 1) { + return EFI_DEVICE_ERROR; + } + + return EFI_SUCCESS; +} + +/** + Strip the leading whitespoace off the given ASCII string. + + @param[in] StrInput The ASCII string that should be processed. + + @retval A pointer to the first non-whitespace character in the given string, + or NULL if the string was all whitespace. + +**/ +CHAR8 * +StripLeadingWhiteSpace ( + IN CHAR8 *StrInput + ) +{ + if (StrInput == NULL) { + return NULL; + } + + while (*StrInput != 0) { + if ((*StrInput == ' ') || (*StrInput == '\t') || (*StrInput == '\n')) { + ++StrInput; + } else { + return StrInput; + } + } + + return NULL; +} + +/** + Convert the given ASCII string to Unicode without appending terminating 0x0000. + + @param[in] StrAscii The source ASCII string, null-terminated. + @param[out] StrUnicode The resulted Unicode string will be put here, without the terminating 0x0000. + + @retval + +**/ +VOID +ConvertToUnicode ( + IN CHAR8 *StrAscii, + OUT CHAR16 *StrUnicode + ) +{ + if ((StrAscii == NULL) || (StrUnicode == NULL)) { + return; + } + + while (*StrAscii != 0) { + *StrUnicode = ATOU (*StrAscii); + ++StrAscii; + ++StrUnicode; + } +} + +/** + Print the given Unicode string. + + @param[in] StrUnicode The null-terminated Unicode string to print. + + @retval + +**/ +VOID +PrintUnicodeString ( + IN CHAR16 *StrUnicode + ) +{ + if (StrUnicode == NULL) { + return; + } + + while (*StrUnicode != 0) { + putchar ((CHAR8)(*StrUnicode)); + ++StrUnicode; + } +} + +/** + The function generates the current timestamp in "YYMMDDHHMM" format + and puts it into the Unicode string supplied, without the null-terminator. + + @param[in] StrTimeStampUnicode The Unicode string which is filled on return with the current timestamp. + + @retval + +**/ +VOID +FillTimeStamp ( + OUT CHAR16 *StrTimeStampUnicode + ) +{ + struct tm *Time; + time_t CurTime; + CHAR8 StrTime[11]; + + // + // Fetch the current time. + // + time (&CurTime); + Time = localtime (&CurTime); + + sprintf ( + StrTime, + "%02d%02d%02d%02d%02d", + (Time->tm_year + 1900) % 100, // Year is 1900-based, need only 2 digits. + Time->tm_mon + 1, // Month is zero based. + Time->tm_mday, + Time->tm_hour, + Time->tm_min + ); + + ConvertToUnicode (StrTime, StrTimeStampUnicode); +} diff --git a/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.exe b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.exe new file mode 100644 index 0000000000..323b87c444 Binary files /dev/null and b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.exe differ diff --git a/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.h b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.h new file mode 100644 index 0000000000..1605e99dd2 --- /dev/null +++ b/BraswellPlatformPkg/Common/Tools/GenBiosId/GenBiosId.h @@ -0,0 +1,147 @@ +/** @file + Definitions for the GenBiosId tool. + + Copyright (c) 1999 - 2015, 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. + +**/ + +#ifndef _GEN_BIOS_ID_MPG_ +#define _GEN_BIOS_ID_MPG_ + +#include +#include +#include +#include + +#define FILE_NAME_SIZE 256 +#define MAX_LINE_SIZE 256 + +#define ATOU(a) (CHAR16) ((UINT8) (a)) + +// +// BIOS ID field names. +// +#define NAME_BOARD_ID "BOARD_ID" +#define NAME_BOARD_REV "BOARD_REV" +#define NAME_OEM_ID "OEM_ID" +#define NAME_BUILD_TYPE "BUILD_TYPE" +#define NAME_VERSION_MAJOR "VERSION_MAJOR" +#define NAME_VERSION_MINOR "VERSION_MINOR" + +// +// Number of ASCII characters in each field +// +#define CHARS_BOARD_ID 7 +#define CHARS_BOARD_REV 1 +#define CHARS_OEM_ID 3 +#define CHARS_BUILD_TYPE 1 +#define CHARS_VERSION_MAJOR 4 +#define CHARS_VERSION_MINOR 2 + +#define FIELD_BOARD_ID 0x0001 +#define FIELD_BOARD_REV 0x0002 +#define FIELD_OEM_ID 0x0004 +#define FIELD_BUILD_TYPE 0x0008 +#define FIELD_VERSION_MAJOR 0x0010 +#define FIELD_VERSION_MINOR 0x0020 + +#define FIELD_ALL ( \ + FIELD_BOARD_ID | \ + FIELD_BOARD_REV | \ + FIELD_OEM_ID | \ + FIELD_BUILD_TYPE | \ + FIELD_VERSION_MAJOR | \ + FIELD_VERSION_MINOR ) + +// +// BIOS ID string format: +// +// $(BOARD_ID)$(BOARD_REV).$(OEM_ID).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM +// +// Example: "TRFTCRB1.86C.0008.D03.0506081529" +// +// The format should be same as platform BIOS ID definition +// +#pragma pack(1) + +typedef struct { + CHAR16 BoardId[7]; // "TRFTCRB" + CHAR16 BoardRev; // "1" + CHAR16 Dot1; // "." + CHAR16 OemId[3]; // "86C" + CHAR16 Dot2; // "." + CHAR16 VersionMajor[4]; // "0008" + CHAR16 Dot3; // "." + CHAR16 BuildType; // "D" + CHAR16 VersionMinor[2]; // "03" + CHAR16 Dot4; // "." + CHAR16 TimeStamp[10]; // "YYMMDDHHMM" + CHAR16 NullTerminator; // 0x0000 +} BIOS_ID_STRING; + +// +// A signature precedes the BIOS ID string in the FV to enable search by external tools. +// +typedef struct { + UINT8 Signature[8]; // "$IBIOSI$" + BIOS_ID_STRING BiosIdString; // "TRFTCRB1.86C.0008.D03.0506081529" +} BIOS_ID_IMAGE; + +#pragma pack() + +INTN +main ( + IN INTN argc, + IN CHAR8 *argv[] + ); + +VOID +PrintBanner ( + VOID + ); + +VOID +PrintUsage ( + VOID + ); + +EFI_STATUS +ParseInputFile ( + VOID + ); + +EFI_STATUS +WriteOutputFile ( + VOID + ); + +CHAR8 * +StripLeadingWhiteSpace ( + IN CHAR8 *StrInput + ); + +VOID +ConvertToUnicode ( + IN CHAR8 *StrAscii, + OUT CHAR16 *StrUnicode + ); + +VOID +PrintUnicodeString ( + IN CHAR16 *StrUnicode + ); + +VOID +FillTimeStamp ( + OUT CHAR16 *StrTimeStampUnicode + ); + +#endif // _GEN_BIOS_ID_MPG_ diff --git a/BraswellPlatformPkg/Common/Tools/GenBiosId/Makefile b/BraswellPlatformPkg/Common/Tools/GenBiosId/Makefile new file mode 100644 index 0000000000..d7cadc7f3e --- /dev/null +++ b/BraswellPlatformPkg/Common/Tools/GenBiosId/Makefile @@ -0,0 +1,24 @@ +#/** @file +# makefile for building the GenBiosId utility. +# +# Copyright (c) 1999 - 2015, 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 ..\Makefiles\ms.common + +APPNAME = GenBiosId + +OBJECTS = GenBiosId.obj + +!INCLUDE ..\Makefiles\ms.app + + -- cgit v1.2.3