Add Verbose and Debug message for GenFw, GenSec, GenFfs and GenFv tool. Meanwhile...
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 27 Sep 2007 06:08:54 +0000 (06:08 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 27 Sep 2007 06:08:54 +0000 (06:08 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@771 7335b38e-4728-0410-8992-fb3ffe349368

17 files changed:
Source/C/Common/BasePeCoff.c
Source/C/Common/EfiCustomizedCompress.h [deleted file]
Source/C/Common/EfiUtilityMsgs.c
Source/C/Common/EfiUtilityMsgs.h
Source/C/Common/MyAlloc.c
Source/C/Common/SimpleFileParsing.c
Source/C/Common/SimpleFileParsing.h
Source/C/GenFfs/GenFfs.c
Source/C/GenFfs/Makefile
Source/C/GenFv/GenFv.c
Source/C/GenFv/GenFvInternalLib.c
Source/C/GenFv/GenFvInternalLib.h
Source/C/GenFv/Makefile
Source/C/GenFw/GenFw.c
Source/C/GenFw/Makefile
Source/C/GenSec/GenSec.c
Source/C/GenSec/Makefile

index 12d5fb2..3e46bea 100644 (file)
@@ -48,7 +48,7 @@ PeCoffLoaderCheckImageType (
   );\r
 \r
 STATIC\r
-void *\r
+VOID *\r
 PeCoffLoaderImageAddress (\r
   IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext,\r
   IN     UINTN                         Address\r
@@ -928,7 +928,7 @@ Returns:
                             ImageContext->Handle,\r
                             0,\r
                             &ImageContext->SizeOfHeaders,\r
-                            (void *) (UINTN) ImageContext->ImageAddress\r
+                            (VOID *) (UINTN) ImageContext->ImageAddress\r
                             );\r
 \r
     TeHdr             = (EFI_TE_IMAGE_HEADER *) (UINTN) (ImageContext->ImageAddress);\r
diff --git a/Source/C/Common/EfiCustomizedCompress.h b/Source/C/Common/EfiCustomizedCompress.h
deleted file mode 100644 (file)
index af26b6f..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2004, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this 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
-\r
-Module Name:\r
-  \r
-  EfiCustomizedCompress.h\r
-\r
-Abstract:\r
-\r
-  Header file for Customized compression routine\r
-  \r
---*/\r
-\r
-#ifndef _EFICUSTOMIZEDCOMPRESS_H\r
-#define _EFICUSTOMIZEDCOMPRESS_H\r
-\r
-#include <Common/UefiBaseTypes.h>\r
-\r
-EFI_STATUS\r
-SetCustomizedCompressionType (\r
-  IN  CHAR8   *Type\r
-  )\r
-;\r
-\r
-/*++\r
-\r
-Routine Description:\r
-\r
-The implementation of Customized SetCompressionType().\r
-\r
-Arguments:\r
-  Type        - The type if compression.\r
-    \r
-Returns:\r
-    \r
-  EFI_SUCCESS           - The type has been set.\r
-  EFI_UNSUPPORTED       - This type is unsupported.\r
-\r
-    \r
---*/\r
-EFI_STATUS\r
-CustomizedGetInfo (\r
-  IN      VOID    *Source,\r
-  IN      UINT32  SrcSize,\r
-  OUT     UINT32  *DstSize,\r
-  OUT     UINT32  *ScratchSize\r
-  )\r
-;\r
-\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  The implementation of Customized GetInfo().\r
-\r
-Arguments:\r
-\r
-  Source      - The source buffer containing the compressed data.\r
-  SrcSize     - The size of source buffer\r
-  DstSize     - The size of destination buffer.\r
-  ScratchSize - The size of scratch buffer.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - The size of destination buffer and the size of scratch buffer are successull retrieved.\r
-  EFI_INVALID_PARAMETER - The source data is corrupted\r
-\r
---*/\r
-EFI_STATUS\r
-CustomizedDecompress (\r
-  IN      VOID    *Source,\r
-  IN      UINT32  SrcSize,\r
-  IN OUT  VOID    *Destination,\r
-  IN      UINT32  DstSize,\r
-  IN OUT  VOID    *Scratch,\r
-  IN      UINT32  ScratchSize\r
-  )\r
-;\r
-\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  The implementation of Customized Decompress().\r
-\r
-Arguments:\r
-\r
-  This        - The protocol instance pointer\r
-  Source      - The source buffer containing the compressed data.\r
-  SrcSize     - The size of source buffer\r
-  Destination - The destination buffer to store the decompressed data\r
-  DstSize     - The size of destination buffer.\r
-  Scratch     - The buffer used internally by the decompress routine. This  buffer is needed to store intermediate data.\r
-  ScratchSize - The size of scratch buffer.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS           - Decompression is successfull\r
-  EFI_INVALID_PARAMETER - The source data is corrupted\r
-\r
---*/\r
-EFI_STATUS\r
-CustomizedCompress (\r
-  IN      UINT8   *SrcBuffer,\r
-  IN      UINT32  SrcSize,\r
-  IN      UINT8   *DstBuffer,\r
-  IN OUT  UINT32  *DstSize\r
-  )\r
-;\r
-\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  The Customized compression routine.\r
-\r
-Arguments:\r
-\r
-  SrcBuffer   - The buffer storing the source data\r
-  SrcSize     - The size of source data\r
-  DstBuffer   - The buffer to store the compressed data\r
-  DstSize     - On input, the size of DstBuffer; On output,\r
-                the size of the actual compressed data.\r
-\r
-Returns:\r
-\r
-  EFI_BUFFER_TOO_SMALL  - The DstBuffer is too small. In this case,\r
-                          DstSize contains the size needed.\r
-  EFI_SUCCESS           - Compression is successful.\r
-\r
---*/\r
-\r
-#endif\r
index e322440..eb6d27b 100644 (file)
@@ -32,20 +32,20 @@ Abstract:
 // Declare module globals for keeping track of the the utility's\r
 // name and other settings.\r
 //\r
-static STATUS mStatus                 = STATUS_SUCCESS;\r
-static CHAR8  mUtilityName[50]        = { 0 };\r
-static UINT32 mPrintLogLevel          = INFO_LOG_LEVEL;\r
-static CHAR8  *mSourceFileName        = NULL;\r
-static UINT32 mSourceFileLineNum      = 0;\r
-static UINT32 mErrorCount             = 0;\r
-static UINT32 mWarningCount           = 0;\r
-static UINT32 mMaxErrors              = 0;\r
-static UINT32 mMaxWarnings            = 0;\r
-static UINT32 mMaxWarningsPlusErrors  = 0;\r
-static INT8   mPrintLimitsSet         = 0;\r
-\r
-static\r
-void\r
+STATIC STATUS mStatus                 = STATUS_SUCCESS;\r
+STATIC CHAR8  mUtilityName[50]        = { 0 };\r
+STATIC UINT32 mPrintLogLevel          = INFO_LOG_LEVEL;\r
+STATIC CHAR8  *mSourceFileName        = NULL;\r
+STATIC UINT32 mSourceFileLineNum      = 0;\r
+STATIC UINT32 mErrorCount             = 0;\r
+STATIC UINT32 mWarningCount           = 0;\r
+STATIC UINT32 mMaxErrors              = 0;\r
+STATIC UINT32 mMaxWarnings            = 0;\r
+STATIC UINT32 mMaxWarningsPlusErrors  = 0;\r
+STATIC INT8   mPrintLimitsSet         = 0;\r
+\r
+STATIC\r
+VOID\r
 PrintMessage (\r
   CHAR8   *Type,\r
   CHAR8   *FileName,\r
@@ -56,13 +56,13 @@ PrintMessage (
   va_list List\r
   );\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PrintLimitExceeded (\r
   VOID\r
   );\r
 \r
-void\r
+VOID\r
 Error (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -159,7 +159,7 @@ Notes:
   }\r
 }\r
 \r
-void\r
+VOID\r
 ParserError (\r
   UINT32  MessageCode,\r
   CHAR8   *Text,\r
@@ -219,7 +219,7 @@ Returns:
   }\r
 }\r
 \r
-void\r
+VOID\r
 ParserWarning (\r
   UINT32  ErrorCode,\r
   CHAR8   *OffendingText,\r
@@ -279,7 +279,7 @@ Returns:
   //  }\r
 }\r
 \r
-void\r
+VOID\r
 Warning (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -351,7 +351,7 @@ Returns:
   va_end (List);\r
 }\r
 \r
-void\r
+VOID\r
 DebugMsg (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -396,8 +396,8 @@ Returns:
   va_end (List);\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PrintMessage (\r
   CHAR8   *Type,\r
   CHAR8   *FileName,\r
@@ -547,8 +547,8 @@ Notes:
   }\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PrintSimpleMessage (\r
   CHAR8   *MsgFmt,\r
   va_list List\r
@@ -576,7 +576,7 @@ Returns:
   }\r
 }\r
 \r
-void\r
+VOID\r
 ParserSetPosition (\r
   CHAR8   *SourceFileName,\r
   UINT32  LineNum\r
@@ -600,7 +600,7 @@ Returns:
   mSourceFileLineNum  = LineNum;\r
 }\r
 \r
-void\r
+VOID\r
 SetUtilityName (\r
   CHAR8   *UtilityName\r
   )\r
@@ -663,7 +663,7 @@ Returns:
   return mStatus;\r
 }\r
 \r
-void\r
+VOID\r
 SetPrintLevel (\r
   UINT32  LogLevel\r
   )\r
@@ -684,7 +684,7 @@ Returns:
   mPrintLogLevel = LogLevel;\r
 }\r
 \r
-void\r
+VOID\r
 VerboseMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
@@ -717,7 +717,7 @@ Returns:
   va_end (List);\r
 }\r
 \r
-void\r
+VOID\r
 NormalMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
@@ -750,7 +750,7 @@ Returns:
   va_end (List);\r
 }\r
 \r
-void\r
+VOID\r
 KeyMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
@@ -783,7 +783,7 @@ Returns:
   va_end (List);\r
 }\r
 \r
-void\r
+VOID\r
 SetPrintLimits (\r
   UINT32  MaxErrors,\r
   UINT32  MaxWarnings,\r
@@ -812,13 +812,13 @@ Returns:
   mPrintLimitsSet         = 1;\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PrintLimitExceeded (\r
   VOID\r
   )\r
 {\r
-  static INT8 mPrintLimitExceeded = 0;\r
+  STATIC INT8 mPrintLimitExceeded = 0;\r
   //\r
   // If we've already printed the message, do nothing. Otherwise\r
   // temporarily increase our print limits so we can pass one\r
@@ -837,13 +837,13 @@ PrintLimitExceeded (
 }\r
 \r
 #if 0\r
-void\r
+VOID\r
 TestUtilityMessages (\r
   VOID\r
   )\r
 {\r
-  char *ArgStr = "ArgString";\r
-  int  ArgInt;\r
+  CHAR8 *ArgStr = "ArgString";\r
+  INTN  ArgInt;\r
 \r
   ArgInt  = 0x12345678;\r
   //\r
index dcdcc09..0df1c48 100644 (file)
@@ -56,7 +56,7 @@ extern "C" {
 //\r
 STATUS\r
 GetUtilityStatus (\r
-  void\r
+  VOID\r
   );\r
 \r
 //\r
@@ -64,13 +64,13 @@ GetUtilityStatus (
 // then we print the utility name instead. However they must tell us the\r
 // utility name early on via this function.\r
 //\r
-void\r
+VOID\r
 SetUtilityName (\r
   CHAR8 *ProgramName\r
   )\r
 ;\r
 \r
-void\r
+VOID\r
 Error (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -81,7 +81,7 @@ Error (
   )\r
 ;\r
 \r
-void\r
+VOID\r
 Warning (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -92,7 +92,7 @@ Warning (
   )\r
 ;\r
 \r
-void\r
+VOID\r
 DebugMsg (\r
   CHAR8   *FileName,\r
   UINT32  LineNumber,\r
@@ -103,37 +103,37 @@ DebugMsg (
   )\r
 ;\r
 \r
-void\r
+VOID\r
 VerboseMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
   );\r
 \r
-void\r
+VOID\r
 NormalMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
   );\r
 \r
-void\r
+VOID\r
 KeyMsg (\r
   CHAR8   *MsgFmt,\r
   ...\r
   );\r
 \r
-void\r
+VOID\r
 SetPrintLevel (\r
   UINT32  LogLevel\r
   );\r
 \r
-void\r
+VOID\r
 ParserSetPosition (\r
   CHAR8   *SourceFileName,\r
   UINT32  LineNum\r
   )\r
 ;\r
 \r
-void\r
+VOID\r
 ParserError (\r
   UINT32  ErrorCode,\r
   CHAR8   *OffendingText,\r
@@ -142,7 +142,7 @@ ParserError (
   )\r
 ;\r
 \r
-void\r
+VOID\r
 ParserWarning (\r
   UINT32  ErrorCode,\r
   CHAR8   *OffendingText,\r
@@ -151,7 +151,7 @@ ParserWarning (
   )\r
 ;\r
 \r
-void\r
+VOID\r
 SetPrintLimits (\r
   UINT32  NumErrors,\r
   UINT32  NumWarnings,\r
index 39fddf7..367226d 100644 (file)
@@ -32,13 +32,13 @@ Abstract:
 //\r
 // Start of allocation list.\r
 //\r
-static MY_ALLOC_STRUCT  *MyAllocData = NULL;\r
+STATIC MY_ALLOC_STRUCT  *MyAllocData = NULL;\r
 \r
 //\r
 //\r
 //\r
-static UINT32           MyAllocHeadMagik  = MYALLOC_HEAD_MAGIK;\r
-static UINT32           MyAllocTailMagik  = MYALLOC_TAIL_MAGIK;\r
+STATIC UINT32           MyAllocHeadMagik  = MYALLOC_HEAD_MAGIK;\r
+STATIC UINT32           MyAllocTailMagik  = MYALLOC_TAIL_MAGIK;\r
 \r
 //\r
 // ////////////////////////////////////////////////////////////////////////////\r
index 65cc02c..6c24f86 100644 (file)
@@ -56,123 +56,123 @@ Abstract:
 //\r
 typedef struct _SOURCE_FILE {\r
   FILE                *Fptr;\r
-  T_CHAR              *FileBuffer;\r
-  T_CHAR              *FileBufferPtr;\r
-  unsigned int        FileSize;\r
-  char                FileName[MAX_PATH];\r
-  unsigned int        LineNum;\r
+  CHAR8               *FileBuffer;\r
+  CHAR8               *FileBufferPtr;\r
+  UINTN               FileSize;\r
+  CHAR8               FileName[MAX_PATH];\r
+  UINTN               LineNum;\r
   BOOLEAN             EndOfFile;\r
   BOOLEAN             SkipToHash;\r
   struct _SOURCE_FILE *Previous;\r
   struct _SOURCE_FILE *Next;\r
-  T_CHAR              ControlCharacter;\r
+  CHAR8               ControlCharacter;\r
 } SOURCE_FILE;\r
 \r
 typedef struct {\r
-  T_CHAR  *FileBufferPtr;\r
+  CHAR8   *FileBufferPtr;\r
 } FILE_POSITION;\r
 \r
 //\r
 // Keep all our module globals in this structure\r
 //\r
-static struct {\r
+STATIC struct {\r
   SOURCE_FILE SourceFile;\r
   BOOLEAN     VerboseFile;\r
   BOOLEAN     VerboseToken;\r
 } mGlobals;\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strcmp (\r
-  T_CHAR *Buffer,\r
-  T_CHAR *Str\r
+  CHAR8  *Buffer,\r
+  CHAR8  *Str\r
   );\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strncmp (\r
-  T_CHAR *Str1,\r
-  T_CHAR *Str2,\r
-  int    Len\r
+  CHAR8  *Str1,\r
+  CHAR8  *Str2,\r
+  INTN    Len\r
   );\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strlen (\r
-  T_CHAR *Str\r
+  CHAR8  *Str\r
   );\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 RewindFile (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
+STATIC\r
 BOOLEAN\r
 IsWhiteSpace (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 SkipWhiteSpace (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
+STATIC\r
 BOOLEAN\r
 EndOfFile (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PreprocessFile (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
-T_CHAR  *\r
+STATIC\r
+CHAR8   *\r
 t_strcpy (\r
-  T_CHAR *Dest,\r
-  T_CHAR *Src\r
+  CHAR8  *Dest,\r
+  CHAR8  *Src\r
   );\r
 \r
-static\r
+STATIC\r
 STATUS\r
 ProcessIncludeFile (\r
   SOURCE_FILE *SourceFile,\r
   SOURCE_FILE *ParentSourceFile\r
   );\r
 \r
-static\r
+STATIC\r
 STATUS\r
 ParseFile (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
+STATIC\r
 FILE    *\r
 FindFile (\r
-  char          *FileName,\r
-  char          *FoundFileName,\r
-  unsigned int  FoundFileNameLen\r
+  CHAR8           *FileName,\r
+  CHAR8           *FoundFileName,\r
+  UINTN           FoundFileNameLen\r
   );\r
 \r
-static\r
+STATIC\r
 STATUS\r
 ProcessFile (\r
   SOURCE_FILE *SourceFile\r
   );\r
 \r
-static\r
+STATIC\r
 STATUS\r
 GetFilePosition (\r
   FILE_POSITION *Fpos\r
   );\r
 \r
-static\r
+STATIC\r
 STATUS\r
 SetFilePosition (\r
   FILE_POSITION *Fpos\r
@@ -194,12 +194,11 @@ Returns:
 \r
 --*/\r
 {\r
-  memset ((void *) &mGlobals, 0, sizeof (mGlobals));\r
+  memset ((VOID *) &mGlobals, 0, sizeof (mGlobals));\r
   return STATUS_SUCCESS;\r
 }\r
 \r
-unsigned\r
-int\r
+UINTN\r
 SFPGetLineNumber (\r
   VOID\r
   )\r
@@ -220,7 +219,7 @@ Returns:
   return mGlobals.SourceFile.LineNum;\r
 }\r
 \r
-T_CHAR *\r
+CHAR8  *\r
 SFPGetFileName (\r
   VOID\r
   )\r
@@ -248,7 +247,7 @@ Returns:
 \r
 STATUS\r
 SFPOpenFile (\r
-  char      *FileName\r
+  CHAR8      *FileName\r
   )\r
 /*++\r
 \r
@@ -271,7 +270,7 @@ Returns:
 \r
 BOOLEAN\r
 SFPIsToken (\r
-  T_CHAR *Str\r
+  CHAR8  *Str\r
   )\r
 /*++\r
 \r
@@ -295,7 +294,7 @@ Notes:
 \r
 --*/\r
 {\r
-  unsigned int  Len;\r
+  UINTN  Len;\r
   SkipWhiteSpace (&mGlobals.SourceFile);\r
   if (EndOfFile (&mGlobals.SourceFile)) {\r
     return FALSE;\r
@@ -315,7 +314,7 @@ Notes:
 \r
 BOOLEAN\r
 SFPIsKeyword (\r
-  T_CHAR *Str\r
+  CHAR8  *Str\r
   )\r
 /*++\r
 \r
@@ -336,7 +335,7 @@ Notes:
 \r
 --*/\r
 {\r
-  unsigned int  Len;\r
+  UINTN  Len;\r
   SkipWhiteSpace (&mGlobals.SourceFile);\r
   if (EndOfFile (&mGlobals.SourceFile)) {\r
     return FALSE;\r
@@ -360,8 +359,8 @@ Notes:
 \r
 BOOLEAN\r
 SFPGetNextToken (\r
-  T_CHAR        *Str,\r
-  unsigned int  Len\r
+  CHAR8  *Str,\r
+  UINTN  Len\r
   )\r
 /*++\r
 \r
@@ -383,8 +382,8 @@ Notes:
 \r
 --*/\r
 {\r
-  unsigned int  Index;\r
-  T_CHAR        TempChar;\r
+  UINTN  Index;\r
+  CHAR8  TempChar;\r
 \r
   SkipWhiteSpace (&mGlobals.SourceFile);\r
   if (EndOfFile (&mGlobals.SourceFile)) {\r
@@ -465,7 +464,7 @@ Notes:
 \r
 BOOLEAN\r
 SFPGetGuidToken (\r
-  T_CHAR *Str,\r
+  CHAR8  *Str,\r
   UINT32 Len\r
   )\r
 /*++\r
@@ -510,11 +509,11 @@ Returns:
 \r
 BOOLEAN\r
 SFPSkipToToken (\r
-  T_CHAR *Str\r
+  CHAR8  *Str\r
   )\r
 {\r
-  unsigned int  Len;\r
-  T_CHAR        *SavePos;\r
+  UINTN  Len;\r
+  CHAR8         *SavePos;\r
   Len     = t_strlen (Str);\r
   SavePos = mGlobals.SourceFile.FileBufferPtr;\r
   SkipWhiteSpace (&mGlobals.SourceFile);\r
@@ -534,7 +533,7 @@ SFPSkipToToken (
 \r
 BOOLEAN\r
 SFPGetNumber (\r
-  unsigned int *Value\r
+  UINTN *Value\r
   )\r
 /*++\r
 \r
@@ -612,7 +611,7 @@ Returns:
   return STATUS_ERROR;\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 ProcessIncludeFile (\r
   SOURCE_FILE *SourceFile,\r
@@ -635,8 +634,8 @@ Returns:
   \r
 --*/\r
 {\r
-  static unsigned int NestDepth = 0;\r
-  char                FoundFileName[MAX_PATH];\r
+  STATIC UINTN NestDepth = 0;\r
+  CHAR8               FoundFileName[MAX_PATH];\r
   STATUS              Status;\r
 \r
   Status = STATUS_SUCCESS;\r
@@ -681,7 +680,7 @@ Finish:
   return Status;\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 ProcessFile (\r
   SOURCE_FILE *SourceFile\r
@@ -714,14 +713,14 @@ Returns:
   }\r
 \r
   fseek (SourceFile->Fptr, 0, SEEK_SET);\r
-  SourceFile->FileBuffer = (T_CHAR *) malloc (SourceFile->FileSize + sizeof (T_CHAR));\r
+  SourceFile->FileBuffer = (CHAR8  *) malloc (SourceFile->FileSize + sizeof (CHAR8 ));\r
   if (SourceFile->FileBuffer == NULL) {\r
     Error (NULL, 0, 0, "memory allocation failure", NULL);\r
     return STATUS_ERROR;\r
   }\r
 \r
-  fread ((void *) SourceFile->FileBuffer, SourceFile->FileSize, 1, SourceFile->Fptr);\r
-  SourceFile->FileBuffer[(SourceFile->FileSize / sizeof (T_CHAR))] = T_CHAR_NULL;\r
+  fread ((VOID *) SourceFile->FileBuffer, SourceFile->FileSize, 1, SourceFile->Fptr);\r
+  SourceFile->FileBuffer[(SourceFile->FileSize / sizeof (CHAR8 ))] = T_CHAR_NULL;\r
   //\r
   // Pre-process the file to replace comments with spaces\r
   //\r
@@ -730,8 +729,8 @@ Returns:
   return STATUS_SUCCESS;\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 PreprocessFile (\r
   SOURCE_FILE *SourceFile\r
   )\r
@@ -838,7 +837,7 @@ Returns:
 \r
 BOOLEAN\r
 SFPGetQuotedString (\r
-  T_CHAR      *Str,\r
+  CHAR8       *Str,\r
   int         Length\r
   )\r
 /*++\r
@@ -914,17 +913,17 @@ Returns:
 }\r
 \r
 #if 0\r
-static\r
-T_CHAR *\r
+STATIC\r
+CHAR8  *\r
 GetQuotedString (\r
   SOURCE_FILE *SourceFile,\r
   BOOLEAN     Optional\r
   )\r
 {\r
-  T_CHAR        *String;\r
-  T_CHAR        *Start;\r
-  T_CHAR        *Ptr;\r
-  unsigned int  Len;\r
+  CHAR8         *String;\r
+  CHAR8         *Start;\r
+  CHAR8         *Ptr;\r
+  UINTN         Len;\r
   BOOLEAN       PreviousBackslash;\r
 \r
   if (SourceFile->FileBufferPtr[0] != T_CHAR_DOUBLE_QUOTE) {\r
@@ -963,7 +962,7 @@ GetQuotedString (
   //\r
   // Now allocate memory for the string and save it off\r
   //\r
-  String = (T_CHAR *) malloc ((Len + 1) * sizeof (T_CHAR));\r
+  String = (CHAR8  *) malloc ((Len + 1) * sizeof (CHAR8 ));\r
   if (String == NULL) {\r
     Error (NULL, 0, 0, "memory allocation failed", NULL);\r
     return NULL;\r
@@ -984,7 +983,7 @@ GetQuotedString (
   return String;\r
 }\r
 #endif\r
-static\r
+STATIC\r
 BOOLEAN\r
 EndOfFile (\r
   SOURCE_FILE *SourceFile\r
@@ -994,7 +993,7 @@ EndOfFile (
   // The file buffer pointer will typically get updated before the End-of-file flag in the\r
   // source file structure, so check it first.\r
   //\r
-  if (SourceFile->FileBufferPtr >= SourceFile->FileBuffer + SourceFile->FileSize / sizeof (T_CHAR)) {\r
+  if (SourceFile->FileBufferPtr >= SourceFile->FileBuffer + SourceFile->FileSize / sizeof (CHAR8 )) {\r
     SourceFile->EndOfFile = TRUE;\r
     return TRUE;\r
   }\r
@@ -1007,15 +1006,15 @@ EndOfFile (
 }\r
 \r
 #if 0\r
-static\r
-void\r
+STATIC\r
+VOID\r
 ProcessTokenInclude (\r
   SOURCE_FILE *SourceFile\r
   )\r
 {\r
-  char          IncludeFileName[MAX_PATH];\r
-  char          *To;\r
-  unsigned int  Len;\r
+  CHAR8          IncludeFileName[MAX_PATH];\r
+  CHAR8          *To;\r
+  UINTN  Len;\r
   BOOLEAN       ReportedError;\r
   SOURCE_FILE   IncludedSourceFile;\r
 \r
@@ -1057,7 +1056,7 @@ ProcessTokenInclude (
     }\r
 \r
     if (!ReportedError) {\r
-      *To = (T_CHAR) SourceFile->FileBufferPtr[0];\r
+      *To = (CHAR8 ) SourceFile->FileBufferPtr[0];\r
       To++;\r
     }\r
 \r
@@ -1066,7 +1065,7 @@ ProcessTokenInclude (
 \r
   if (!ReportedError) {\r
     *To = 0;\r
-    memset ((char *) &IncludedSourceFile, 0, sizeof (SOURCE_FILE));\r
+    memset ((CHAR8 *) &IncludedSourceFile, 0, sizeof (SOURCE_FILE));\r
     strcpy (IncludedSourceFile.FileName, IncludeFileName);\r
     ProcessIncludeFile (&IncludedSourceFile, SourceFile);\r
   }\r
@@ -1079,7 +1078,7 @@ FailDone:
   SourceFile->SkipToHash = TRUE;\r
 }\r
 #endif\r
-static\r
+STATIC\r
 BOOLEAN\r
 IsWhiteSpace (\r
   SOURCE_FILE *SourceFile\r
@@ -1098,12 +1097,12 @@ IsWhiteSpace (
   }\r
 }\r
 \r
-unsigned int\r
+UINTN\r
 SkipWhiteSpace (\r
   SOURCE_FILE *SourceFile\r
   )\r
 {\r
-  unsigned int  Count;\r
+  UINTN  Count;\r
 \r
   Count = 0;\r
   while (!EndOfFile (SourceFile)) {\r
@@ -1136,11 +1135,11 @@ SkipWhiteSpace (
   return Count;\r
 }\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strcmp (\r
-  T_CHAR *Buffer,\r
-  T_CHAR *Str\r
+  CHAR8  *Buffer,\r
+  CHAR8  *Str\r
   )\r
 /*++\r
 \r
@@ -1158,7 +1157,7 @@ Returns:
 \r
 --*/\r
 {\r
-  unsigned int  Len;\r
+  UINTN  Len;\r
 \r
   Len = 0;\r
   while (*Str && (*Str == *Buffer)) {\r
@@ -1174,13 +1173,13 @@ Returns:
   return Len;\r
 }\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strlen (\r
-  T_CHAR *Str\r
+  CHAR8  *Str\r
   )\r
 {\r
-  unsigned int  Len;\r
+  UINTN  Len;\r
   Len = 0;\r
   while (*Str) {\r
     Len++;\r
@@ -1190,11 +1189,11 @@ t_strlen (
   return Len;\r
 }\r
 \r
-static\r
-unsigned int\r
+STATIC\r
+UINTN\r
 t_strncmp (\r
-  T_CHAR *Str1,\r
-  T_CHAR *Str2,\r
+  CHAR8  *Str1,\r
+  CHAR8  *Str2,\r
   int    Len\r
   )\r
 {\r
@@ -1211,14 +1210,14 @@ t_strncmp (
   return 0;\r
 }\r
 \r
-static\r
-T_CHAR *\r
+STATIC\r
+CHAR8  *\r
 t_strcpy (\r
-  T_CHAR *Dest,\r
-  T_CHAR *Src\r
+  CHAR8  *Dest,\r
+  CHAR8  *Src\r
   )\r
 {\r
-  T_CHAR  *SaveDest;\r
+  CHAR8   *SaveDest;\r
   SaveDest = Dest;\r
   while (*Src) {\r
     *Dest = *Src;\r
@@ -1230,8 +1229,8 @@ t_strcpy (
   return SaveDest;\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 RewindFile (\r
   SOURCE_FILE *SourceFile\r
   )\r
@@ -1241,10 +1240,10 @@ RewindFile (
   SourceFile->EndOfFile     = 0;\r
 }\r
 \r
-static\r
+STATIC\r
 UINT32\r
 GetHexChars (\r
-  T_CHAR      *Buffer,\r
+  CHAR8       *Buffer,\r
   UINT32      BufferLen\r
   )\r
 {\r
@@ -1297,10 +1296,10 @@ Returns:
   UINT32        Value32;\r
   UINT32        Index;\r
   FILE_POSITION FPos;\r
-  T_CHAR        TempString[20];\r
-  T_CHAR        TempString2[3];\r
-  T_CHAR        *From;\r
-  T_CHAR        *To;\r
+  CHAR8         TempString[20];\r
+  CHAR8         TempString2[3];\r
+  CHAR8         *From;\r
+  CHAR8         *To;\r
   UINT32        Len;\r
   BOOLEAN       Status;\r
 \r
@@ -1431,7 +1430,7 @@ Done:
   return Status;\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 GetFilePosition (\r
   FILE_POSITION *Fpos\r
@@ -1441,7 +1440,7 @@ GetFilePosition (
   return STATUS_SUCCESS;\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 SetFilePosition (\r
   FILE_POSITION *Fpos\r
index 7cf25a6..71b698a 100644 (file)
@@ -24,8 +24,6 @@ Abstract:
 \r
 #include <Common/UefiBaseTypes.h>\r
 \r
-#define T_CHAR  char\r
-\r
 STATUS\r
 SFPInit (\r
   VOID\r
@@ -34,32 +32,32 @@ SFPInit (
 \r
 STATUS\r
 SFPOpenFile (\r
-  char    *FileName\r
+  CHAR8    *FileName\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPIsKeyword (\r
-  T_CHAR *Str\r
+  CHAR8 *Str\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPIsToken (\r
-  T_CHAR *Str\r
+  CHAR8 *Str\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPGetNextToken (\r
-  T_CHAR        *Str,\r
-  unsigned int  Len\r
+  CHAR8  *Str,\r
+  UINTN  Len\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPGetGuidToken (\r
-  T_CHAR *Str,\r
+  CHAR8 *Str,\r
   UINT32 Len\r
   )\r
 ;\r
@@ -68,27 +66,27 @@ SFPGetGuidToken (
 \r
 BOOLEAN\r
 SFPGetGuid (\r
-  int         GuidStyle,\r
+  INTN        GuidStyle,\r
   EFI_GUID    *Value\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPSkipToToken (\r
-  T_CHAR *Str\r
+  CHAR8 *Str\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPGetNumber (\r
-  unsigned int   *Value\r
+  UINTN   *Value\r
   )\r
 ;\r
 \r
 BOOLEAN\r
 SFPGetQuotedString (\r
-  T_CHAR      *Str,\r
-  int         Length\r
+  CHAR8      *Str,\r
+  INTN       Length\r
   )\r
 ;\r
 \r
@@ -104,14 +102,13 @@ SFPCloseFile (
   )\r
 ;\r
 \r
-unsigned\r
-int\r
+UINTN\r
 SFPGetLineNumber (\r
   VOID\r
   )\r
 ;\r
 \r
-T_CHAR  *\r
+CHAR8  *\r
 SFPGetFileName (\r
   VOID\r
   )\r
index 43eb849..03296ee 100644 (file)
@@ -34,7 +34,7 @@ Abstract:
 #define UTILITY_MAJOR_VERSION   0\r
 #define UTILITY_MINOR_VERSION   1\r
 \r
-static CHAR8 *mFfsFileType[] = {\r
+STATIC CHAR8 *mFfsFileType[] = {\r
   NULL,                                   // 0x00\r
   "EFI_FV_FILETYPE_RAW",                  // 0x01\r
   "EFI_FV_FILETYPE_FREEFORM",             // 0x02\r
@@ -49,25 +49,23 @@ static CHAR8 *mFfsFileType[] = {
   "EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE" // 0x0B\r
  };\r
 \r
-static CHAR8 *mAlignName[] = {\r
+STATIC CHAR8 *mAlignName[] = {\r
   "1", "2", "4", "8", "16", "32", "64", "128", "256", "512",\r
   "1K", "2K", "4K", "8K", "16K", "32K", "64K"\r
  };\r
 \r
-static CHAR8 *mFfsValidAlignName[] = {\r
+STATIC CHAR8 *mFfsValidAlignName[] = {\r
   "8", "16", "128", "512", "1K", "4K", "32K", "64K"\r
  };\r
 \r
-static UINT32 mFfsValidAlign[] = {0, 8, 16, 128, 512, 1024, 4096, 32768, 65536};\r
+STATIC UINT32 mFfsValidAlign[] = {0, 8, 16, 128, 512, 1024, 4096, 32768, 65536};\r
 \r
-static EFI_GUID mZeroGuid = {0};\r
+STATIC EFI_GUID mZeroGuid = {0};\r
 \r
-static BOOLEAN VerboseMode = FALSE;\r
-\r
-static\r
-void \r
+STATIC\r
+VOID \r
 Version (\r
-  void\r
+  VOID\r
   )\r
 /*++\r
 \r
@@ -88,10 +86,10 @@ Returns:
   fprintf (stdout, "%s Version %d.%d\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
 }\r
 \r
-static\r
-void\r
+STATIC\r
+VOID\r
 Usage (\r
-  void\r
+  VOID\r
   )\r
 /*++\r
 \r
@@ -101,7 +99,7 @@ Routine Description:
 \r
 Arguments:\r
 \r
-  void\r
+  VOID\r
 \r
 Returns:\r
 \r
@@ -112,7 +110,7 @@ Returns:
   //\r
   // Summary usage\r
   //\r
-  fprintf (stdout, "Usage: %s [options]\n\n", UTILITY_NAME);\r
+  fprintf (stdout, "\nUsage: %s [options]\n\n", UTILITY_NAME);\r
   \r
   //\r
   // Copyright declaration\r
@@ -149,11 +147,13 @@ Returns:
                         the alignment scope 1~64K. It is specified together\n\\r
                         with sectionfile to point its alignment in FFS file.\n");\r
   fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");\r
+  fprintf (stdout, "  -q, --quiet           Disable all messages except key message and fatal error\n");\r
+  fprintf (stdout, "  -d, --debug level     Enable debug messages, at input debug level.\n");\r
   fprintf (stdout, "  --version             Show program's version number and exit.\n");\r
   fprintf (stdout, "  -h, --help            Show this help message and exit.\n");\r
 }\r
 \r
-static\r
+STATIC\r
 EFI_STATUS\r
 StringtoAlignment (\r
   IN  CHAR8  *AlignBuffer,\r
@@ -193,7 +193,7 @@ Returns:
   return EFI_INVALID_PARAMETER;\r
 }\r
 \r
-static\r
+STATIC\r
 UINT8\r
 StringToType (\r
   IN CHAR8 *String\r
@@ -229,7 +229,7 @@ Returns:
   return EFI_FV_FILETYPE_ALL;\r
 }\r
 \r
-static\r
+STATIC\r
 EFI_STATUS\r
 GetSectionContents (\r
   IN  CHAR8   **InputFileName,\r
@@ -314,6 +314,8 @@ Returns:
         SectHeader->Size[1] = (UINT8) ((Offset & 0xff00) >> 8);\r
         SectHeader->Size[2] = (UINT8) ((Offset & 0xff0000) >> 16);\r
       }\r
+      DebugMsg (NULL, 0, 9, "Pad raw section for section data alignment", \r
+                "Pad Raw section size is %d", Offset);\r
 \r
       Size = Size + Offset;\r
     }\r
@@ -330,6 +332,9 @@ Returns:
     fseek (InFile, 0, SEEK_END);\r
     FileSize = ftell (InFile);\r
     fseek (InFile, 0, SEEK_SET);\r
+    DebugMsg (NULL, 0, 9, "Input section files", \r
+              "the input section name is %s and the size is %d bytes", InputFileName[Index], FileSize); \r
+\r
     //\r
     // Now read the contents of the file into the buffer\r
     // Buffer must be enough to contain the file content.\r
@@ -346,6 +351,9 @@ Returns:
     Size += FileSize;\r
   }\r
   \r
+  //\r
+  // Set the actual length of the data.\r
+  //\r
   if (Size > *BufferLength) {\r
     *BufferLength = Size;\r
     return EFI_BUFFER_TOO_SMALL;\r
@@ -392,7 +400,12 @@ Returns:
   EFI_FFS_FILE_HEADER     FfsFileHeader;\r
   FILE                    *FfsFile;\r
   UINT32                  Index;\r
-\r
+  UINT64                  LogLevel;\r
+  \r
+  //\r
+  // Init local variables\r
+  //\r
+  LogLevel       = 0;\r
   Index          = 0;\r
   FfsAttrib      = 0;  \r
   FfsAlign       = 0;\r
@@ -406,11 +419,11 @@ Returns:
   MaxAlignment   = 1;\r
   FfsFile        = NULL;\r
   Status         = EFI_SUCCESS;\r
-  \r
+\r
   SetUtilityName (UTILITY_NAME);\r
 \r
   if (argc == 1) {\r
-    Error (NULL, 0, 1001, "Missing options", "Input file");\r
+    Error (NULL, 0, 1001, "Missing options", "no options input");\r
     Usage ();\r
     return STATUS_ERROR;\r
   }\r
@@ -552,7 +565,10 @@ Returns:
              InputFileNum ++;\r
         break;\r
       }\r
-\r
+      \r
+      //\r
+      // Section File alignment requirement\r
+      //\r
       if ((stricmp (argv[0], "-n") == 0) || (stricmp (argv[0], "--sectionalign") == 0)) {\r
         Status = StringtoAlignment (argv[1], &(InputFileAlign[InputFileNum]));\r
         if (EFI_ERROR (Status)) {\r
@@ -572,20 +588,44 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-v") == 0) || (stricmp (argv[0], "--verbose") == 0)) {\r
-      VerboseMode = TRUE;\r
+      SetPrintLevel (VERBOSE_LOG_LEVEL);\r
+      VerboseMsg ("Verbose output Mode Set!");\r
       argc --;\r
       argv ++;\r
       continue;\r
     }\r
-    \r
+\r
+    if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) {\r
+      SetPrintLevel (KEY_LOG_LEVEL);\r
+      KeyMsg ("Quiet output Mode Set!");\r
+      argc --;\r
+      argv ++;\r
+      continue;\r
+    }\r
+\r
+    if ((stricmp (argv[0], "-d") == 0) || (stricmp (argv[0], "--debug") == 0)) {\r
+      Status = AsciiStringToUint64 (argv[1], FALSE, &LogLevel);\r
+      if (EFI_ERROR (Status)) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        goto Finish;\r
+      }\r
+      if (LogLevel > 9) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Debug Level range is 0~9, currnt input level is %d", LogLevel);\r
+        goto Finish;\r
+      }\r
+      SetPrintLevel (LogLevel);\r
+      DebugMsg (NULL, 0, 9, "Debug Mode Set", "Debug Output Mode Level %s is set!", argv[1]);\r
+      argc -= 2;\r
+      argv += 2;\r
+      continue;\r
+    }\r
+\r
     Error (NULL, 0, 1000, "Unknown option", argv[0]);\r
     goto Finish;\r
   }\r
 \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool start.\n", UTILITY_NAME);\r
-  }\r
-   \r
+  VerboseMsg ("%s tool start.", UTILITY_NAME);\r
+\r
   //\r
   // Check the complete input paramters.\r
   //\r
@@ -609,6 +649,34 @@ Returns:
     goto Finish;\r
     // OutFile = stdout;\r
   }\r
+  \r
+  //\r
+  // Output input parameter information\r
+  //\r
+  VerboseMsg ("Fv File type is %s", mFfsFileType [FfsFiletype]);\r
+  VerboseMsg ("Output file name is %s", OutputFileName);\r
+  VerboseMsg ("FFS File Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", \r
+                FileGuid.Data1,\r
+                FileGuid.Data2,\r
+                FileGuid.Data3,\r
+                FileGuid.Data4[0],\r
+                FileGuid.Data4[1],\r
+                FileGuid.Data4[2],\r
+                FileGuid.Data4[3],\r
+                FileGuid.Data4[4],\r
+                FileGuid.Data4[5],\r
+                FileGuid.Data4[6],\r
+                FileGuid.Data4[7]);\r
+  if (FfsAttrib & FFS_ATTRIB_FIXED != 0) {\r
+    VerboseMsg ("FFS File has the fixed file attribute");\r
+  }\r
+  if (FfsAttrib & FFS_ATTRIB_CHECKSUM != 0) {\r
+    VerboseMsg ("FFS File requires the checksum of the whole file");\r
+  }\r
+  VerboseMsg ("FFS file alignment is %s", mFfsValidAlignName[FfsAlign]);\r
+  for (Index = 0; Index < InputFileNum; Index ++) {\r
+    VerboseMsg ("the %dth input section name is %s and section alignment is %d", Index, InputFileName[Index], InputFileAlign[Index]);\r
+  }\r
 \r
   //\r
   // Calculate the size of all input section files.\r
@@ -664,13 +732,14 @@ Returns:
   if (FfsAlign < Index) {\r
     FfsAlign = Index;\r
   }\r
-  \r
+  VerboseMsg ("the alignment of the genreated FFS file is %d", mFfsValidAlign [FfsAlign]);  \r
   FfsFileHeader.Attributes = FfsAttrib | (FfsAlign << 3);\r
   \r
   //\r
   // Now FileSize includes the EFI_FFS_FILE_HEADER\r
   //\r
   FileSize += sizeof (EFI_FFS_FILE_HEADER);\r
+  VerboseMsg ("the size of the genreated FFS file is %d bytes", FileSize);\r
   FfsFileHeader.Size[0]  = (UINT8) (FileSize & 0xFF);\r
   FfsFileHeader.Size[1]  = (UINT8) ((FileSize & 0xFF00) >> 8);\r
   FfsFileHeader.Size[2]  = (UINT8) ((FileSize & 0xFF0000) >> 16);\r
@@ -733,9 +802,7 @@ Finish:
   // routines, then the status has been saved. Get the value and\r
   // return it to the caller.\r
   //\r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());  \r
-  }\r
+  VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ());\r
 \r
   return GetUtilityStatus ();\r
 }\r
index 1de2d48..64bf603 100644 (file)
@@ -2,7 +2,7 @@
 
 APPNAME = GenFfs
 
-LIBS = Common.lib
+LIBS = $(LIB_PATH)\Common.lib
 
 OBJECTS = GenFfs.obj
 
index b464239..a8864ff 100644 (file)
@@ -41,12 +41,10 @@ Abstract:
 #define UTILITY_MAJOR_VERSION 0\r
 #define UTILITY_MINOR_VERSION 1\r
 \r
-BOOLEAN VerboseMode = FALSE;\r
-\r
-static\r
-void \r
+STATIC\r
+VOID \r
 Version (\r
-  void\r
+  VOID\r
 )\r
 /*++\r
 \r
@@ -67,10 +65,10 @@ Returns:
   fprintf (stdout, "%s Version %d.%d\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION);\r
 }\r
 \r
-static\r
-void \r
+STATIC\r
+VOID \r
 Usage (\r
-  void\r
+  VOID\r
   )\r
 /*++\r
 \r
@@ -91,7 +89,7 @@ Returns:
   //\r
   // Summary usage\r
   //\r
-  fprintf (stdout, "Usage: %s [options]\n\n", UTILITY_NAME);\r
+  fprintf (stdout, "\nUsage: %s [options]\n\n", UTILITY_NAME);\r
   \r
   //\r
   // Copyright declaration\r
@@ -122,6 +120,8 @@ Returns:
   fprintf (stdout, "  -c, --capsule         Create Capsule Image.\n");\r
   fprintf (stdout, "  -p, --dump            Dump Capsule Image header.\n");\r
   fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");\r
+  fprintf (stdout, "  -q, --quiet           Disable all messages except key message and fatal error\n");\r
+  fprintf (stdout, "  -d, --debug level     Enable debug messages, at input debug level.\n");\r
   fprintf (stdout, "  --version             Show program's version number and exit.\n");\r
   fprintf (stdout, "  -h, --help            Show this help message and exit.\n");\r
 }\r
@@ -172,6 +172,7 @@ Returns:
   MEMORY_FILE           AddrMemoryFile;\r
   FILE                  *FpFile;\r
   EFI_CAPSULE_HEADER    *CapsuleHeader;\r
+  UINT64                LogLevel;\r
 \r
   InfFileName   = NULL;\r
   AddrFileName  = NULL;\r
@@ -186,11 +187,12 @@ Returns:
   DumpCapsule   = FALSE;\r
   FpFile        = NULL;\r
   CapsuleHeader = NULL;\r
+  LogLevel      = 0;\r
 \r
   SetUtilityName (UTILITY_NAME);\r
 \r
   if (argc == 1) {\r
-    Error (NULL, 0, 1001, "Missing options", "Input file");\r
+    Error (NULL, 0, 1001, "Missing options", "No input options");\r
     Usage ();\r
     return STATUS_ERROR;\r
   }\r
@@ -267,11 +269,38 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-v") == 0) || (stricmp (argv[0], "--verbose") == 0)) {\r
-      VerboseMode = TRUE;\r
+      SetPrintLevel (VERBOSE_LOG_LEVEL);\r
+      VerboseMsg ("Verbose output Mode Set!");\r
+      argc --;\r
+      argv ++;\r
+      continue;\r
+    }\r
+\r
+    if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) {\r
+      SetPrintLevel (KEY_LOG_LEVEL);\r
+      KeyMsg ("Quiet output Mode Set!");\r
       argc --;\r
       argv ++;\r
       continue;\r
     }\r
+\r
+    if ((stricmp (argv[0], "-d") == 0) || (stricmp (argv[0], "--debug") == 0)) {\r
+      Status = AsciiStringToUint64 (argv[1], FALSE, &LogLevel);\r
+      if (EFI_ERROR (Status)) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        goto Finish;\r
+      }\r
+      if (LogLevel > 9) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Debug Level range is 0~9, currnt input level is %d", LogLevel);\r
+        goto Finish;\r
+      }\r
+      SetPrintLevel (LogLevel);\r
+      DebugMsg (NULL, 0, 9, "Debug Mode Set", "Debug Output Mode Level %s is set!", argv[1]);\r
+      argc -= 2;\r
+      argv += 2;\r
+      continue;\r
+    }\r
+\r
     //\r
     // Don't recognize the paramter.\r
     //\r
@@ -279,9 +308,7 @@ Returns:
     return STATUS_ERROR;\r
   }\r
 \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool start.\n", UTILITY_NAME);\r
-  }\r
+  VerboseMsg ("%s tool start.", UTILITY_NAME);\r
   \r
   //\r
   // check input parameter\r
@@ -290,16 +317,21 @@ Returns:
     Error (NULL, 0, 1001, "Missing Option", "Input File");\r
     return STATUS_ERROR;\r
   }\r
+  VerboseMsg ("the input file name is %s", InfFileName);\r
 \r
   if (!DumpCapsule && OutFileName == NULL) {\r
     Error (NULL, 0, 1001, "Missing option", "Output file name");\r
     return STATUS_ERROR;\r
   }\r
+  if (OutFileName != NULL) {\r
+    VerboseMsg ("the output file name is %s", OutFileName);\r
+  }\r
   \r
   //\r
   // Read boot and runtime address from address file\r
   //\r
   if (AddrFileName != NULL) {\r
+    VerboseMsg ("the input address file name is %s", AddrFileName);\r
     Status = GetFileImage (AddrFileName, &InfFileImage, &InfFileSize);\r
     if (EFI_ERROR (Status)) {\r
       return STATUS_ERROR;\r
@@ -322,6 +354,7 @@ Returns:
         Error (NULL, 0, 2000, "Invalid paramter", "%s = %s", EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING, ValueString);\r
         return STATUS_ERROR;\r
       }\r
+      DebugMsg (NULL, 0, 9, "Boot driver base address", "%s = %s", EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING, ValueString);\r
     }\r
   \r
     //\r
@@ -337,6 +370,7 @@ Returns:
         Error (NULL, 0, 2000, "Invalid paramter", "%s = %s", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, ValueString);\r
         return STATUS_ERROR;\r
       }\r
+      DebugMsg (NULL, 0, 9, "Runtime driver base address", "%s = %s", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, ValueString);\r
     }\r
     \r
     //\r
@@ -354,6 +388,7 @@ Returns:
   }\r
   \r
   if (DumpCapsule) {\r
+    VerboseMsg ("Dump the capsule header information for the input capsule image %s", InfFileName);\r
     //\r
     // Dump Capsule Image Header Information\r
     //\r
@@ -385,6 +420,7 @@ Returns:
     fprintf (FpFile, "  Capsule image size    0x%08X\n", CapsuleHeader->CapsuleImageSize);\r
     fclose (FpFile);\r
   } else if (CapsuleFlag) {\r
+    VerboseMsg ("Create capsule image");\r
     //\r
     // Call the GenerateCapImage to generate Capsule Image\r
     //\r
@@ -394,6 +430,10 @@ Returns:
       OutFileName\r
       );\r
   } else {\r
+    VerboseMsg ("Create Fv image and its map file");\r
+    if (XipBase != -1) {\r
+      VerboseMsg ("FvImage Rebase Address is 0x%X", XipBase);\r
+    }\r
     //\r
     // Call the GenerateFvImage to generate Fv Image\r
     //\r
@@ -429,17 +469,17 @@ Returns:
     if (BtBase != 0) {\r
       fprintf (FpFile, EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING);\r
       fprintf (FpFile, " = 0x%x\n", BtBase);\r
+      DebugMsg (NULL, 0, 9, "Updated boot driver base address", "%s = 0x%x", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, BtBase);\r
     }\r
     if (RtBase != 0) {\r
       fprintf (FpFile, EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING);\r
       fprintf (FpFile, " = 0x%x\n", RtBase);\r
+      DebugMsg (NULL, 0, 9, "Updated runtime driver base address", "%s = 0x%x", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, RtBase);\r
     }\r
     fclose (FpFile);\r
   }\r
 \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());  \r
-  }\r
+  VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ());\r
 \r
   return GetUtilityStatus ();\r
 }
\ No newline at end of file
index 295670e..4367ff5 100644 (file)
@@ -36,15 +36,15 @@ Abstract:
 #include "PeCoffLib.h"\r
 #include "WinNtInclude.h"\r
 \r
-static UINT32   MaxFfsAlignment = 0;\r
+STATIC UINT32   MaxFfsAlignment = 0;\r
 \r
 extern EFI_GUID mPadFileGuidTable[];\r
-static UINT32   mPadFileIndex = 0;\r
+STATIC UINT32   mPadFileIndex = 0;\r
 \r
-EFI_GUID  gEfiFirmwareFileSystem2Guid = EFI_FIRMWARE_FILE_SYSTEM2_GUID;\r
-EFI_GUID  gEfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;\r
+EFI_GUID  mEfiFirmwareFileSystem2Guid = EFI_FIRMWARE_FILE_SYSTEM2_GUID;\r
+EFI_GUID  mEfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;\r
 \r
-CHAR8      *FvbAttributeName[] = {\r
+CHAR8      *mFvbAttributeName[] = {\r
   EFI_FVB2_READ_DISABLED_CAP_STRING, \r
   EFI_FVB2_READ_ENABLED_CAP_STRING,  \r
   EFI_FVB2_READ_STATUS_STRING,       \r
@@ -63,7 +63,7 @@ CHAR8      *FvbAttributeName[] = {
   EFI_FVB2_WRITE_LOCK_STATUS_STRING \r
 };\r
 \r
-CHAR8      *FvbAlignmentName[] = {\r
+CHAR8      *mFvbAlignmentName[] = {\r
   EFI_FVB2_ALIGNMENT_1_STRING,   \r
   EFI_FVB2_ALIGNMENT_2_STRING,   \r
   EFI_FVB2_ALIGNMENT_4_STRING,   \r
@@ -202,6 +202,7 @@ Returns:
       Error (NULL, 0, 2000, "Invalid paramter", "%s = %s", EFI_FV_BASE_ADDRESS_STRING, Value);\r
       return EFI_ABORTED;\r
     }\r
+    DebugMsg (NULL, 0, 9, "rebase address", "%s = %s", EFI_FV_BASE_ADDRESS_STRING, Value);\r
 \r
     FvInfo->BaseAddress = Value64;\r
   }\r
@@ -216,11 +217,23 @@ Returns:
     //\r
     Status = StringToGuid (Value, &FvInfo->FvGuid);\r
     if (EFI_ERROR (Status)) {\r
-      memcpy (&FvInfo->FvGuid, &gEfiFirmwareFileSystem2Guid, sizeof (EFI_GUID));\r
+      memcpy (&FvInfo->FvGuid, &mEfiFirmwareFileSystem2Guid, sizeof (EFI_GUID));\r
     }\r
   } else {\r
-    memcpy (&FvInfo->FvGuid, &gEfiFirmwareFileSystem2Guid, sizeof (EFI_GUID));\r
-  }\r
+    memcpy (&FvInfo->FvGuid, &mEfiFirmwareFileSystem2Guid, sizeof (EFI_GUID));\r
+  }\r
+  DebugMsg (NULL, 0, 9, "Fv File Guid", "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", \r
+                FvInfo->FvGuid.Data1,\r
+                FvInfo->FvGuid.Data2,\r
+                FvInfo->FvGuid.Data3,\r
+                FvInfo->FvGuid.Data4[0],\r
+                FvInfo->FvGuid.Data4[1],\r
+                FvInfo->FvGuid.Data4[2],\r
+                FvInfo->FvGuid.Data4[3],\r
+                FvInfo->FvGuid.Data4[4],\r
+                FvInfo->FvGuid.Data4[5],\r
+                FvInfo->FvGuid.Data4[6],\r
+                FvInfo->FvGuid.Data4[7]);\r
 \r
   //\r
   // Read the FV file name\r
@@ -236,13 +249,13 @@ Returns:
   //\r
   // Read Fv Attribute\r
   //\r
-  for (Index = 0; Index < sizeof (FvbAttributeName)/sizeof (char *); Index ++) {\r
-    if ((FvbAttributeName [Index] != NULL) && \\r
-        (FindToken (InfFile, ATTRIBUTES_SECTION_STRING, FvbAttributeName [Index], 0, Value) == EFI_SUCCESS)) {\r
+  for (Index = 0; Index < sizeof (mFvbAttributeName)/sizeof (CHAR8 *); Index ++) {\r
+    if ((mFvbAttributeName [Index] != NULL) && \\r
+        (FindToken (InfFile, ATTRIBUTES_SECTION_STRING, mFvbAttributeName [Index], 0, Value) == EFI_SUCCESS)) {\r
       if ((strcmp (Value, TRUE_STRING) == 0) || (strcmp (Value, ONE_STRING) == 0)) {\r
         FvInfo->FvAttributes |= 1 << Index;\r
       } else if ((strcmp (Value, FALSE_STRING) != 0) && (strcmp (Value, ZERO_STRING) != 0)) {\r
-        Error (NULL, 0, 2000, "Invalid parameter", "%s expected %s | %s", FvbAttributeName [Index], TRUE_STRING, FALSE_STRING);\r
+        Error (NULL, 0, 2000, "Invalid parameter", "%s expected %s | %s", mFvbAttributeName [Index], TRUE_STRING, FALSE_STRING);\r
         return EFI_ABORTED;\r
       }\r
     }\r
@@ -251,10 +264,11 @@ Returns:
   //\r
   // Read Fv Alignment\r
   //\r
-  for (Index = 0; Index < sizeof (FvbAlignmentName)/sizeof (char *); Index ++) {\r
-    if (FindToken (InfFile, ATTRIBUTES_SECTION_STRING, FvbAlignmentName [Index], 0, Value) == EFI_SUCCESS) {\r
+  for (Index = 0; Index < sizeof (mFvbAlignmentName)/sizeof (CHAR8 *); Index ++) {\r
+    if (FindToken (InfFile, ATTRIBUTES_SECTION_STRING, mFvbAlignmentName [Index], 0, Value) == EFI_SUCCESS) {\r
       if (strcmp (Value, TRUE_STRING) == 0) {\r
         FvInfo->FvAttributes |= Index << 16;\r
+        DebugMsg (NULL, 0, 9, "FV file alignment", "Align = %s", mFvbAlignmentName [Index]);\r
         break;\r
       }\r
     }\r
@@ -280,6 +294,7 @@ Returns:
       }\r
 \r
       FvInfo->FvBlocks[Index].Length = (UINT32) Value64;\r
+      DebugMsg (NULL, 0, 9, "Fv Block Size", "%s = %s", EFI_BLOCK_SIZE_STRING, Value);\r
     } else {\r
       //\r
       // If there is no blocks size, but there is the number of block, then we have a mismatched pair\r
@@ -313,6 +328,7 @@ Returns:
       }\r
 \r
       FvInfo->FvBlocks[Index].NumBlocks = (UINT32) Value64;\r
+      DebugMsg (NULL, 0, 9, "Fv Block Number", "%s = %s", EFI_NUM_BLOCKS_STRING, Value);\r
     }\r
   }\r
 \r
@@ -335,11 +351,15 @@ Returns:
       // Add the file\r
       //\r
       strcpy (FvInfo->FvFiles[Index], Value);\r
+      DebugMsg (NULL, 0, 9, "Fv component file", "the %dth name is %s", Index, Value);\r
     } else {\r
       break;\r
     }\r
   }\r
 \r
+  if (Index == 0) {\r
+    Warning (NULL, 0, 0, "Fv components are not specified.");\r
+  }\r
   //\r
   // Compute size for easy access later\r
   //\r
@@ -638,7 +658,7 @@ Returns:
 \r
 --*/\r
 {\r
-  if (!memcmp (&FileBuffer->Name, &gEfiFirmwareVolumeTopFileGuid, sizeof (EFI_GUID))) {\r
+  if (!memcmp (&FileBuffer->Name, &mEfiFirmwareVolumeTopFileGuid, sizeof (EFI_GUID))) {\r
     return TRUE;\r
   } else {\r
     return FALSE;\r
@@ -801,6 +821,7 @@ Returns:
       //\r
       memcpy (*VtfFileImage, FileBuffer, FileSize);\r
       free (FileBuffer);\r
+      DebugMsg (NULL, 0, 9, "Add VTF FFS file in FV image", NULL);\r
       return EFI_SUCCESS;\r
     } else {\r
       //\r
@@ -1062,6 +1083,7 @@ Returns:
   SecCorePhysicalAddress = FvInfo->BaseAddress;\r
   SecCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage;\r
   SecCorePhysicalAddress += EntryPoint;\r
+  DebugMsg (NULL, 0, 9, "SecCore physical entry point address", "Address = 0x%X", SecCorePhysicalAddress); \r
 \r
   //\r
   // Find the PEI Core\r
@@ -1101,6 +1123,7 @@ Returns:
   PeiCorePhysicalAddress = FvInfo->BaseAddress;\r
   PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage;\r
   PeiCorePhysicalAddress += EntryPoint;\r
+  DebugMsg (NULL, 0, 9, "PeiCore physical entry point address", "Address = 0x%X", PeiCorePhysicalAddress);\r
 \r
   if (MachineType == EFI_IMAGE_MACHINE_IA64) {\r
     //\r
@@ -1186,6 +1209,7 @@ Returns:
     //\r
     Ia32ResetAddressPtr   = (UINT32 *) ((UINTN) FvImage->Eof - 4);\r
     *Ia32ResetAddressPtr  = (UINT32) (FvInfo->BaseAddress);\r
+    DebugMsg (NULL, 0, 9, "update BFV base address in the top FV image", "BFV base address = 0x%X", FvInfo->BaseAddress);\r
 \r
     //\r
     // Update the Startup AP in the FVH header block ZeroVector region.\r
@@ -1232,6 +1256,7 @@ Returns:
     // IpiVector at the 4k aligned address in the top 2 blocks in the PEI FV. \r
     //\r
     IpiVector  = FV_IMAGES_TOP_ADDRESS - ((UINTN) FvImage->Eof - (UINTN) BytePointer);\r
+    DebugMsg (NULL, 0, 9, "Startup AP Vector address", "IpiVector at 0x%X", IpiVector);\r
     IpiVector  = IpiVector >> 12;\r
     IpiVector  = IpiVector & 0xFF;\r
 \r
@@ -1460,6 +1485,7 @@ Returns:
     strcpy (FvMapName, FvFileName);\r
     strcat (FvMapName, ".map");\r
   }\r
+  VerboseMsg ("Fv Map file name is %s", FvMapName);\r
 \r
   FvMapFile = fopen (FvMapName, "w");\r
   if (FvMapFile == NULL) {\r
@@ -1488,6 +1514,7 @@ Returns:
   if (EFI_ERROR (Status)) {\r
     return Status;    \r
   }\r
+  VerboseMsg ("the generated Fv image size is %d bytes", FvInfo.Size);\r
   \r
   //\r
   // support fv image and empty fv image\r
@@ -1497,7 +1524,7 @@ Returns:
   //\r
   // Allocate the FV, assure FvImage Header 8 byte alignment\r
   //\r
-  FvBufferHeader = malloc (FvImageSize + 8);\r
+  FvBufferHeader = malloc (FvImageSize + sizeof (UINT64));\r
   if (FvBufferHeader == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -1623,6 +1650,7 @@ Returns:
         Error (NULL, 0, 3000, "Invalid", "Could not update the reset vector.");\r
         goto Finish;                                              \r
       }\r
+      DebugMsg (NULL, 0, 9, "Update Reset vector in VTF file", NULL);\r
     }\r
   } \r
   \r
@@ -2577,6 +2605,7 @@ Returns:
       Error (NULL, 0, 2000, "Invalid paramter", "%s = %s", EFI_CAPSULE_GUID_STRING, Value);\r
       return EFI_ABORTED;\r
     }\r
+    DebugMsg (NULL, 0, 9, "Capsule Guid", "%s = %s", EFI_CAPSULE_GUID_STRING, Value);\r
   } else {\r
     Error (NULL, 0, 2001, "Missing required argument", EFI_CAPSULE_GUID_STRING);\r
     return EFI_ABORTED;\r
@@ -2593,6 +2622,7 @@ Returns:
       return EFI_ABORTED;\r
     }\r
     CapInfo->HeaderSize = (UINT32) Value64;\r
+    DebugMsg (NULL, 0, 9, "Capsule Header size", "%s = %s", EFI_CAPSULE_HEADER_SIZE_STRING, Value);\r
   }\r
 \r
   //\r
@@ -2608,6 +2638,7 @@ Returns:
       Error (NULL, 0, 2000, "Invalid paramter", "invalid Flag setting for %s", EFI_CAPSULE_FLAGS_STRING);\r
       return EFI_ABORTED;\r
     }\r
+    DebugMsg (NULL, 0, 9, "Capsule Flag", Value);\r
   }\r
 \r
   //\r
@@ -2635,13 +2666,14 @@ Returns:
       // Add the file\r
       //\r
       strcpy (CapInfo->CapFiles[Index], Value);\r
+      DebugMsg (NULL, 0, 9, "Capsule component file", "the %dth file name is %s", Index, CapInfo->CapFiles[Index]); \r
     } else {\r
       break;\r
     }\r
   }\r
   \r
-  if (Index == 0 && VerboseMode) {\r
-    fprintf(stdout, "Capsule components are not specified.\n");\r
+  if (Index == 0) {\r
+    Warning (NULL, 0, 0, "Capsule components are not specified.");\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -2787,6 +2819,8 @@ Returns:
 \r
   fwrite (CapBuffer, 1, CapSize, fpout);\r
   fclose (fpout);\r
+  \r
+  VerboseMsg ("The size of the generated capsule image is %d bytes", CapSize);\r
 \r
   return EFI_SUCCESS;\r
 }\r
index 4dd8ae7..3cbf1b3 100644 (file)
@@ -40,8 +40,6 @@ Abstract:
 #include "ParseInf.h"\r
 #include "EfiUtilityMsgs.h"\r
 \r
-extern BOOLEAN VerboseMode;\r
-\r
 //\r
 // Different file separater for Linux and Windows\r
 //\r
index d496fb5..c0bbd91 100644 (file)
@@ -2,7 +2,7 @@
 
 APPNAME = GenFv
 
-LIBS = Common.lib RpcRT4.lib
+LIBS = $(LIB_PATH)\Common.lib RpcRT4.lib
 
 OBJECTS = GenFv.obj GenFvInternalLib.obj GenFvPadFileTable.obj
 
index c1366ff..e6836b5 100644 (file)
@@ -64,6 +64,9 @@ Abstract:
 #define UTILITY_MAJOR_VERSION 0\r
 #define UTILITY_MINOR_VERSION 1\r
 \r
+//\r
+// Action for this tool.\r
+//\r
 #define FW_DUMMY_IMAGE       0\r
 #define FW_EFI_IMAGE         1\r
 #define FW_TE_IMAGE          2\r
@@ -99,8 +102,7 @@ typedef struct {
   UINTN  Reserved[3];\r
 } MICROCODE_IMAGE_HEADER;\r
 \r
-static UINT8 *InImageName;\r
-static BOOLEAN VerboseMode = FALSE;\r
+STATIC UINT8 *mInImageName;\r
 \r
 STATIC\r
 EFI_STATUS\r
@@ -152,7 +154,7 @@ Routine Description:
 \r
 Arguments:\r
 \r
-  void\r
+  VOID\r
 \r
 Returns:\r
 \r
@@ -163,7 +165,7 @@ Returns:
   //\r
   // Summary usage\r
   //\r
-  fprintf (stdout, "Usage: %s [options] <input_file>\n\n", UTILITY_NAME);\r
+  fprintf (stdout, "\nUsage: %s [options] <input_file>\n\n", UTILITY_NAME);\r
   \r
   //\r
   // Copyright declaration\r
@@ -179,7 +181,7 @@ Returns:
   fprintf (stdout, "  -e EFI_FILETYPE, --efiImage EFI_FILETYPE\n\\r
                         Create Efi Image. EFI_FILETYPE is one of BASE, SEC,\n\\r
                         PEI_CORE, PEIM, DXE_CORE, DXE_RUNTIME_DRIVER,\n\\r
-                        DXE_SAL_DRIVER, UEFI_DRIVER, UEFI_APPLICATIOn, \n\\r
+                        DXE_SAL_DRIVER, UEFI_DRIVER, UEFI_APPLICATION, \n\\r
                         DXE_SMM_DRIVER, SECURITY_CORE, COMBINED_PEIM_DRIVER, \n\\r
                         PIC_PEIM, RELOCATABLE_PEIM, BS_DRIVER, RT_DRIVER,\n\\r
                         APPLICATION, SAL_RT_DRIVER to support all module types\n");\r
@@ -197,11 +199,13 @@ Returns:
   fprintf (stdout, "  -a NUM, --align NUM   NUM is one HEX or DEC format alignment value.\n");\r
   fprintf (stdout, "  -p NUM, --pad NUM     NUM is one HEX or DEC format padding value.\n");\r
   fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");\r
+  fprintf (stdout, "  -q, --quiet           Disable all messages except key message and fatal error\n");\r
+  fprintf (stdout, "  -d, --debug level     Enable debug messages, at input debug level.\n");\r
   fprintf (stdout, "  --version             Show program's version number and exit\n");\r
   fprintf (stdout, "  -h, --help            Show this help message and exit\n");\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 CheckAcpiTable (\r
   VOID      *AcpiTable,\r
@@ -342,7 +346,7 @@ Returns:
   return STATUS_SUCCESS;\r
 }\r
 \r
-static\r
+STATIC\r
 STATUS\r
 FCopyFile (\r
   FILE    *in,\r
@@ -503,12 +507,12 @@ IsDataShdr(
   return (Shdr->sh_flags & (SHF_WRITE | SHF_ALLOC)) == (SHF_ALLOC | SHF_WRITE);
 }
 
-void
+VOID
 CreateSectionHeader(
-  const char *Name,
-  UINT32     Offset,
-  UINT32     Size,
-  UINT32     Flags
+  const CHAR8 *Name,
+  UINT32      Offset,
+  UINT32      Size,
+  UINT32      Flags
   )
 {
   EFI_IMAGE_SECTION_HEADER *Hdr;
@@ -528,7 +532,7 @@ CreateSectionHeader(
   TableOffset += sizeof (EFI_IMAGE_SECTION_HEADER);
 }
 
-void
+VOID
 ScanSections(
   VOID
   )
@@ -656,7 +660,7 @@ ScanSections(
            | EFI_IMAGE_SCN_MEM_READ);
 }
 
-void
+VOID
 WriteSections(
   int   (*Filter)(Elf_Shdr *)
   )
@@ -680,7 +684,7 @@ WriteSections(
   memset(CoffFile + CoffSectionsOffset[Idx], 0, Shdr->sh_size);
   break;
       default:\r
-  Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", InImageName, (UINTN)Shdr->sh_type);
+  Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", mInImageName, (UINTN)Shdr->sh_type);
       }
     }
   }
@@ -709,7 +713,7 @@ WriteSections(
   if (Sym->st_shndx == SHN_UNDEF
       || Sym->st_shndx == SHN_ABS
       || Sym->st_shndx > Ehdr->e_shnum) {
-    Error (NULL, 0, 3000, "Invalid", "%s bad symbol definition", InImageName);
+    Error (NULL, 0, 3000, "Invalid", "%s bad symbol definition", mInImageName);
   }
   SymShdr = GetShdrByIndex(Sym->st_shndx);
 
@@ -738,14 +742,14 @@ WriteSections(
       - (SecOffset - SecShdr->sh_addr);
     break;
   default:
-    Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", InImageName, ELF_R_TYPE(Rel->r_info));\r
+    Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", mInImageName, ELF_R_TYPE(Rel->r_info));\r
   }
       }
     }
   }
 }
 
-void
+VOID
 CoffAddFixupEntry(
   UINT16 Val
   )
@@ -756,7 +760,7 @@ CoffAddFixupEntry(
   CoffOffset += 2;
 }
 
-void
+VOID
 CoffAddFixup(
   UINT32 Offset,
   UINT8  Type
@@ -796,7 +800,7 @@ CoffAddFixup(
   CoffAddFixupEntry((Type << 12) | (Offset & 0xfff));
 }
 
-void
+VOID
 WriteRelocations(
   VOID
   )
@@ -824,7 +828,7 @@ WriteRelocations(
        EFI_IMAGE_REL_BASED_HIGHLOW);
       break;
     default:
-      Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", InImageName, ELF_R_TYPE(Rel->r_info));
+      Error (NULL, 0, 3000, "Invalid", "%s unhandle section type %x", mInImageName, ELF_R_TYPE(Rel->r_info));
     }
   }
       }
@@ -849,12 +853,12 @@ WriteRelocations(
   Dir->Size = CoffOffset - RelocOffset;
 }
 
-void
+VOID
 WriteDebug(
   VOID
   )
 {
-  UINT32 Len = strlen(InImageName) + 1;
+  UINT32 Len = strlen(mInImageName) + 1;
   UINT32 DebugOffset = CoffOffset;
   EFI_IMAGE_NT_HEADERS *NtHdr;
   EFI_IMAGE_DATA_DIRECTORY *DataDir;
@@ -878,7 +882,7 @@ WriteDebug(
   
   Nb10 = (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY*)(Dir + 1);
   Nb10->Signature = CODEVIEW_SIGNATURE_NB10;
-  strcpy ((UINT8 *)(Nb10 + 1), InImageName);
+  strcpy ((UINT8 *)(Nb10 + 1), mInImageName);
 
   CreateSectionHeader (".debug", DebugOffset, CoffOffset - DebugOffset,
            EFI_IMAGE_SCN_CNT_INITIALIZED_DATA
@@ -891,7 +895,7 @@ WriteDebug(
   DataDir->Size = CoffOffset - DebugOffset;
 }
 
-void
+VOID
 ConvertElf (
   UINT8  **FileBuffer,
   UINTN *FileLength
@@ -988,6 +992,7 @@ Returns:
   UNWIND_INFO       *UnwindInfo;\r
   STATUS            Status;\r
   BOOLEAN           ReplaceFlag;\r
+  UINT64            LogLevel;\r
   EFI_TE_IMAGE_HEADER          TEImageHeader;\r
   EFI_IMAGE_SECTION_HEADER     *SectionHeader;\r
   EFI_IMAGE_DOS_HEADER         *DosHdr;\r
@@ -1004,7 +1009,7 @@ Returns:
   //\r
   InputFileNum      = 0; \r
   InputFileName     = NULL;\r
-  InImageName       = NULL;\r
+  mInImageName       = NULL;\r
   OutImageName      = NULL;\r
   ModuleType        = NULL;\r
   OutImageType      = FW_DUMMY_IMAGE;\r
@@ -1021,9 +1026,10 @@ Returns:
   MciHeader         = NULL;\r
   CheckSum          = 0;\r
   ReplaceFlag       = FALSE;\r
+  LogLevel          = 0;\r
 \r
   if (argc == 1) {\r
-    Error (NULL, 0, 1001, "Missing options", "Input file");\r
+    Error (NULL, 0, 1001, "Missing options", "No input options");\r
     Usage ();\r
     return STATUS_ERROR;\r
   }\r
@@ -1147,12 +1153,38 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-v") == 0) || (stricmp (argv[0], "--verbose") == 0)) {\r
-      VerboseMode = TRUE;\r
+      SetPrintLevel (VERBOSE_LOG_LEVEL);\r
+      VerboseMsg ("Verbose output Mode Set!");\r
       argc --;\r
       argv ++;\r
       continue;\r
     }\r
 \r
+    if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) {\r
+      SetPrintLevel (KEY_LOG_LEVEL);\r
+      KeyMsg ("Quiet output Mode Set!");\r
+      argc --;\r
+      argv ++;\r
+      continue;\r
+    }\r
+\r
+    if ((stricmp (argv[0], "-d") == 0) || (stricmp (argv[0], "--debug") == 0)) {\r
+      Status = AsciiStringToUint64 (argv[1], FALSE, &LogLevel);\r
+      if (EFI_ERROR (Status)) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        goto Finish;\r
+      }\r
+      if (LogLevel > 9) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Debug Level range is 0~9, currnt input level is %d", LogLevel);\r
+        goto Finish;\r
+      }\r
+      SetPrintLevel (LogLevel);\r
+      DebugMsg (NULL, 0, 9, "Debug Mode Set", "Debug Output Mode Level %s is set!", argv[1]);\r
+      argc -= 2;\r
+      argv += 2;\r
+      continue;\r
+    }\r
+\r
     //\r
     // Get Input file name\r
     //\r
@@ -1186,12 +1218,10 @@ Returns:
     argv ++;\r
   }\r
   \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool start.\n", UTILITY_NAME);\r
-  }\r
+  VerboseMsg ("%s tool start.", UTILITY_NAME);\r
 \r
   if (OutImageType == FW_DUMMY_IMAGE) {\r
-    Error (NULL, 0, 1001, "Missing option", "No action specified, such as -e, -c or -t\n");\r
+    Error (NULL, 0, 1001, "Missing option", "No action specified, such as -e, -c or -t");\r
     goto Finish;\r
   }\r
 \r
@@ -1199,7 +1229,7 @@ Returns:
   // check input files\r
   //\r
   if (InputFileNum == 0) {\r
-    Error (NULL, 0, 1001, "Missing option", "Input files\n");\r
+    Error (NULL, 0, 1001, "Missing option", "Input files");\r
     goto Finish;\r
   }\r
 \r
@@ -1212,9 +1242,49 @@ Returns:
   }\r
    \r
   //\r
-  // One input file\r
+  // Input image file\r
+  //\r
+  mInImageName = InputFileName [InputFileNum - 1];\r
+  VerboseMsg ("the input file name is %s", mInImageName);\r
+  \r
+  //\r
+  // Action will be taken for the input file.\r
   //\r
-  InImageName = InputFileName [InputFileNum - 1];\r
+  switch (OutImageType) {\r
+  case FW_EFI_IMAGE:\r
+    VerboseMsg ("Create efi image on module type %s based on the input PE image.", ModuleType);\r
+    break;\r
+  case FW_TE_IMAGE:\r
+    VerboseMsg ("Create Te Image based on the input PE image.");\r
+    break;\r
+  case FW_ACPI_IMAGE:\r
+    VerboseMsg ("Get acpi table data from the input PE image.");\r
+    break;\r
+  case FW_BIN_IMAGE:\r
+    VerboseMsg ("Convert the input EXE to the output BIN file.");\r
+    break;\r
+  case FW_ZERO_DEBUG_IMAGE:\r
+    VerboseMsg ("Zero the Debug Data Fields in input PE image.");\r
+    break;\r
+  case FW_SET_STAMP_IMAGE:\r
+    VerboseMsg ("Set new time stamp %s in the input PE image.", TimeStamp);\r
+    break;\r
+  case DUMP_TE_HEADER:\r
+    VerboseMsg ("Dump the TE header information of the input TE image.");\r
+    break;\r
+  case FW_MCI_IMAGE:\r
+    VerboseMsg ("Conver input MicroCode.txt file to MicroCode.bin file.");\r
+    break;\r
+  case FW_MERGE_IMAGE:\r
+    VerboseMsg ("Combine the input multi microcode bin files to one bin file.");\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+  \r
+  if (ReplaceFlag) {\r
+    VerboseMsg ("Overwrite the input file with the output content.");\r
+  }\r
 \r
   //\r
   // Open output file and Write image into the output file.\r
@@ -1225,11 +1295,12 @@ Returns:
       Error (NULL, 0, 0001, "Error opening file", OutImageName);\r
       goto Finish;\r
     }\r
+    VerboseMsg ("Output file name is %s", OutImageName);\r
   } else if (!ReplaceFlag) {\r
     if (OutImageType == DUMP_TE_HEADER) {\r
       fpOut = stdout;\r
     } else {\r
-      Error (NULL, 0, 1001, "Missing option", "output file\n");\r
+      Error (NULL, 0, 1001, "Missing option", "output file");\r
       goto Finish;\r
     }\r
   }
@@ -1280,9 +1351,9 @@ Returns:
   // Conver MicroCode.txt file to MicroCode.bin file\r
   //\r
   if (OutImageType == FW_MCI_IMAGE) {\r
-    fpIn = fopen (InImageName, "r");\r
+    fpIn = fopen (mInImageName, "r");\r
     if (!fpIn) {\r
-      Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+      Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
       goto Finish;\r
     }\r
     \r
@@ -1302,11 +1373,11 @@ Returns:
     // Error if no data.\r
     //\r
     if (FileLength == 0) {\r
-      Error (NULL, 0, 3000, "Invalid", "no parse-able data found in file %s", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "no parse-able data found in file %s", mInImageName);\r
       goto Finish;\r
     }\r
     if (FileLength < sizeof (MICROCODE_IMAGE_HEADER)) {\r
-      Error (NULL, 0, 3000, "Invalid", "amount of parse-able data in %s is insufficient to contain a microcode header", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "amount of parse-able data in %s is insufficient to contain a microcode header", mInImageName);\r
       goto Finish;\r
     }\r
 \r
@@ -1345,7 +1416,7 @@ Returns:
     }\r
 \r
     if (Index != FileLength) {\r
-      Error (NULL, 0, 3000, "Invalid", "file contents of %s do not contain expected TotalSize 0x%04X", InImageName, Index);\r
+      Error (NULL, 0, 3000, "Invalid", "file contents of %s do not contain expected TotalSize 0x%04X", mInImageName, Index);\r
       goto Finish;\r
     }\r
 \r
@@ -1361,7 +1432,7 @@ Returns:
       Index       += sizeof (UINTN);\r
     }\r
     if (CheckSum != 0) {\r
-      Error (NULL, 0, 3000, "Invalid", "checksum failed on file contents of %s", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "checksum failed on file contents of %s", mInImageName);\r
       goto Finish;\r
     }\r
     //\r
@@ -1375,17 +1446,17 @@ Returns:
     }\r
     \r
     if (ReplaceFlag) {\r
-      fpInOut = fopen (InImageName, "wb");\r
+      fpInOut = fopen (mInImageName, "wb");\r
       if (fpInOut != NULL) {\r
-        Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+        Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
         goto Finish;\r
       }\r
       if (fwrite (FileBuffer, FileLength, 1, fpInOut) != 1) {\r
-        Error (NULL, 0, 0002, "Error writing file", InImageName);\r
+        Error (NULL, 0, 0002, "Error writing file", mInImageName);\r
         goto Finish;\r
       }\r
     }\r
-      \r
+    VerboseMsg ("the size of output file is %d bytes", FileLength);\r
     //\r
     //  Convert Mci.TXT to Mci.bin file successfully\r
     //\r
@@ -1395,9 +1466,9 @@ Returns:
   //\r
   // Open input file and read file data into file buffer.\r
   //\r
-  fpIn = fopen (InImageName, "rb");\r
+  fpIn = fopen (mInImageName, "rb");\r
   if (!fpIn) {\r
-    Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+    Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
     goto Finish;\r
   }\r
 \r
@@ -1412,13 +1483,15 @@ Returns:
   fread (FileBuffer, 1, FileLength, fpIn);\r
   fclose (fpIn);\r
   \r
+  DebugMsg (NULL, 0, 9, "input file info", "the input file size is %d bytes", FileLength);\r
+  \r
   //\r
   // Replace file\r
   //\r
   if (ReplaceFlag) {\r
-    fpInOut = fopen (InImageName, "wb");\r
+    fpInOut = fopen (mInImageName, "wb");\r
     if (!fpInOut) {\r
-      Error (NULL, 0, 0001, "Error opening file", InImageName);\r
+      Error (NULL, 0, 0001, "Error opening file", mInImageName);\r
       goto Finish;\r
     }\r
   }\r
@@ -1428,11 +1501,11 @@ Returns:
   if (OutImageType == DUMP_TE_HEADER) {\r
     memcpy (&TEImageHeader, FileBuffer, sizeof (TEImageHeader));\r
     if (TEImageHeader.Signature != EFI_TE_IMAGE_HEADER_SIGNATURE) {\r
-      Error (NULL, 0, 3000, "Invalid", "TE header signature of file %s is not correct", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "TE header signature of file %s is not correct", mInImageName);\r
       goto Finish;      \r
     }\r
     if (fpInOut != NULL) {\r
-      fprintf (fpInOut, "Dump of file %s\n\n", InImageName);\r
+      fprintf (fpInOut, "Dump of file %s\n\n", mInImageName);\r
       fprintf (fpInOut, "TE IMAGE HEADER VALUES\n");\r
       fprintf (fpInOut, "%17X machine\n", TEImageHeader.Machine);\r
       fprintf (fpInOut, "%17X number of sections\n", TEImageHeader.NumberOfSections);\r
@@ -1446,7 +1519,7 @@ Returns:
     }\r
 \r
     if (fpOut != NULL) {\r
-      fprintf (fpOut, "Dump of file %s\n\n", InImageName);\r
+      fprintf (fpOut, "Dump of file %s\n\n", mInImageName);\r
       fprintf (fpOut, "TE IMAGE HEADER VALUES\n");\r
       fprintf (fpOut, "%17X machine\n", TEImageHeader.Machine);\r
       fprintf (fpOut, "%17X number of sections\n", TEImageHeader.NumberOfSections);\r
@@ -1475,6 +1548,7 @@ Returns:
         // Default TE Image Type is Boot service driver\r
         //\r
         Type = EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER;\r
+        VerboseMsg ("Efi Image substytem type is efi boot service driver");\r
       }\r
     } else {\r
       if (stricmp (ModuleType, "BASE") == 0 ||\r
@@ -1491,18 +1565,22 @@ Returns:
           stricmp (ModuleType, "DXE_SMM_DRIVER") == 0  ||\r
           stricmp (ModuleType, "UEFI_DRIVER") == 0) {\r
         Type = EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER;\r
+        VerboseMsg ("Efi Image substytem type is efi boot service driver");\r
     \r
       } else if (stricmp (ModuleType, "UEFI_APPLICATION") == 0 || \r
                  stricmp (ModuleType, "APPLICATION") == 0) {\r
         Type = EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION;\r
+        VerboseMsg ("Efi Image substytem type is efi application");\r
     \r
       } else if (stricmp (ModuleType, "DXE_RUNTIME_DRIVER") == 0 || \r
                  stricmp (ModuleType, "RT_DRIVER") == 0) {\r
         Type = EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER;\r
+        VerboseMsg ("Efi Image substytem type is efi runtime driver");\r
     \r
       } else if (stricmp (ModuleType, "DXE_SAL_DRIVER") == 0 || \r
                  stricmp (ModuleType, "SAL_RT_DRIVER") == 0) {\r
         Type = EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER;\r
+        VerboseMsg ("Efi Image substytem type is efi sal runtime driver");\r
     \r
       } else {\r
         Error (NULL, 0, 1003, "Invalid option value", "EFI_FILETYPE = %s", ModuleType);\r
@@ -1515,7 +1593,8 @@ Returns:
   // Convert EFL image to PeImage\r
   //\r
 #ifdef HAVE_ELF
-  if (IsElfHeader(FileBuffer)) {
+  if (IsElfHeader(FileBuffer)) {\r
+    VerboseMsg ("Convert the input ELF Image to Pe Image");
     ConvertElf(&FileBuffer, &FileLength);
   }
 #endif\r
@@ -1525,13 +1604,13 @@ Returns:
   //\r
   DosHdr = (EFI_IMAGE_DOS_HEADER *)FileBuffer;\r
   if (DosHdr->e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
-    Error (NULL, 0, 3000, "Invalid", "DOS header signature not found in source image");\r
+    Error (NULL, 0, 3000, "Invalid", "DOS header signature not found in %s image", mInImageName);\r
     goto Finish;\r
   }\r
 \r
   PeHdr = (EFI_IMAGE_NT_HEADERS *)(FileBuffer + DosHdr->e_lfanew);\r
   if (PeHdr->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
-    Error (NULL, 0, 3000, "Invalid", "PE header signature not found in source image");\r
+    Error (NULL, 0, 3000, "Invalid", "PE header signature not found in %s image", mInImageName);\r
     goto Finish;\r
   }\r
   \r
@@ -1540,7 +1619,7 @@ Returns:
   //\r
   if (OutImageType == FW_BIN_IMAGE) {\r
     if (FileLength < PeHdr->OptionalHeader.SizeOfHeaders) {\r
-      Error (NULL, 0, 3000, "Invalid", "FileSize of %s is not a legal size.", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "FileSize of %s is not a legal size.", mInImageName);\r
       goto Finish;\r
     }\r
     //\r
@@ -1552,6 +1631,7 @@ Returns:
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer + PeHdr->OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->OptionalHeader.SizeOfHeaders, fpInOut);\r
     }\r
+    VerboseMsg ("the size of output file is %d bytes", FileLength - PeHdr->OptionalHeader.SizeOfHeaders);\r
     goto Finish;\r
   }\r
 \r
@@ -1570,6 +1650,7 @@ Returns:
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer, 1, FileLength, fpInOut);\r
     }\r
+    VerboseMsg ("the size of output file is %d bytes", FileLength);\r
     goto Finish; \r
   }\r
 \r
@@ -1588,6 +1669,7 @@ Returns:
     if (fpInOut != NULL) {\r
       fwrite (FileBuffer, 1, FileLength, fpInOut);\r
     }\r
+    VerboseMsg ("the size of output file is %d bytes", FileLength);\r
     goto Finish;\r
   }\r
 \r
@@ -1608,7 +1690,7 @@ Returns:
         }\r
 \r
         if (CheckAcpiTable (FileBuffer + SectionHeader->PointerToRawData, FileLength) != STATUS_SUCCESS) {\r
-          Error (NULL, 0, 3000, "Invalid", "failed to check ACPI table in %s", InImageName);\r
+          Error (NULL, 0, 3000, "Invalid", "failed to check ACPI table in %s", mInImageName);\r
           goto Finish;\r
         }\r
         \r
@@ -1621,10 +1703,11 @@ Returns:
         if (fpInOut != NULL) {\r
           fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpInOut);\r
         }\r
+        VerboseMsg ("the size of output file is %d bytes", FileLength);\r
         goto Finish;\r
       }\r
     }\r
-    Error (NULL, 0, 3000, "Invalid", "failed to get ACPI table from %s", InImageName);\r
+    Error (NULL, 0, 3000, "Invalid", "failed to get ACPI table from %s", mInImageName);\r
     goto Finish;\r
   }\r
   //\r
@@ -1713,6 +1796,7 @@ Returns:
                 Optional32->SizeOfInitializedData -= (SectionHeader->SizeOfRawData - AllignedRelocSize);\r
                 SectionHeader->SizeOfRawData = AllignedRelocSize;\r
                 FileLength = Optional32->SizeOfImage;\r
+                DebugMsg (NULL, 0, 9, "Remove the zero padding bytes at the end of the base relocations", "The size of padding bytes is %d", SectionHeader->SizeOfRawData - AllignedRelocSize);\r
               }\r
             }\r
           }\r
@@ -1775,6 +1859,7 @@ Returns:
                 }\r
                 memset (RuntimeFunction, 0, sizeof (RUNTIME_FUNCTION));\r
               }\r
+              DebugMsg (NULL, 0, 9, "Zero the .pdata section if the machine type is X64 and the Debug Directory is empty", NULL);\r
 \r
               break;\r
             }\r
@@ -1813,6 +1898,7 @@ Returns:
                 Optional64->SizeOfInitializedData -= (SectionHeader->SizeOfRawData - AllignedRelocSize);\r
                 SectionHeader->SizeOfRawData = AllignedRelocSize;\r
                 FileLength = Optional64->SizeOfImage;\r
+                DebugMsg (NULL, 0, 9, "Remove the zero padding bytes at the end of the base relocations", "The size of padding bytes is %d", SectionHeader->SizeOfRawData - AllignedRelocSize);\r
               }\r
             }\r
           }\r
@@ -1826,7 +1912,7 @@ Returns:
       //\r
       // Pack the subsystem and NumberOfSections into 1 byte. Make sure they fit both.\r
       //\r
-      Error (NULL, 0, 3000, "Invalid", "Image subsystem or NumberOfSections of PeImage %s cannot be packed into 1 byte", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "Image subsystem or NumberOfSections of PeImage %s cannot be packed into 1 byte", mInImageName);\r
       goto Finish;\r
     }\r
 \r
@@ -1834,10 +1920,12 @@ Returns:
       //\r
       // TeImage has the same section alignment and file alignment.\r
       //\r
-      Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment of PeImage %s does not match for TeImage", InImageName);\r
+      Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment of PeImage %s does not match for TeImage", mInImageName);\r
       goto Finish;\r
     }\r
-\r
+    \r
+    DebugMsg (NULL, 0, 9, "TeImage Header Info", "Machine type is %X, Sections number is %X, Stripped size is %X, EntryPoint is %X, BaseOfCode is %X, ImageBase is %X", \r
+              TEImageHeader.Machine, TEImageHeader.NumberOfSections, TEImageHeader.StrippedSize, TEImageHeader.AddressOfEntryPoint, TEImageHeader.BaseOfCode, TEImageHeader.ImageBase);\r
     //\r
     // Update Image to TeImage\r
     //\r
@@ -1849,6 +1937,7 @@ Returns:
       fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpInOut);\r
       fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpInOut);\r
     }\r
+    VerboseMsg ("the size of output file is %d bytes", FileLength - TEImageHeader.StrippedSize);\r
     goto Finish;\r
   }\r
   \r
@@ -1861,6 +1950,7 @@ Returns:
   if (fpInOut != NULL) {\r
     fwrite (FileBuffer, 1, FileLength, fpInOut);\r
   }\r
+  VerboseMsg ("the size of output file is %d bytes", FileLength);\r
 \r
 Finish:\r
   if (FileBuffer != NULL) {\r
@@ -1885,9 +1975,7 @@ Finish:
     fclose (fpInOut);\r
   }\r
   \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());  \r
-  }\r
+  VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ());\r
   \r
   return GetUtilityStatus ();\r
 }\r
@@ -2010,6 +2098,7 @@ Returns:
 --*/\r
 {\r
   struct tm                       stime;\r
+  struct tm                       *ptime;\r
   time_t                          newtime;\r
   UINTN                           Index;\r
   UINTN                           DebugDirectoryEntryRva;\r
@@ -2094,6 +2183,9 @@ Returns:
     }\r
   }\r
   \r
+  ptime = localtime (&newtime);\r
+  DebugMsg (NULL, 0, 9, "New Image Time Stamp", "%04d-%02d-%02d %02d:%02d:%02d",\r
+            ptime->tm_year + 1900, ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec); \r
   //\r
   // Set new time and data into PeImage.\r
   //\r
index fe106b3..9e04db2 100644 (file)
@@ -2,7 +2,7 @@
 
 APPNAME = GenFw
 
-LIBS = Common.lib
+LIBS = $(LIB_PATH)\Common.lib
 
 OBJECTS = GenFw.obj
 
index 2e5b1d0..50ad23e 100644 (file)
@@ -41,7 +41,7 @@ Abstract:
 \r
 #define MAX_SECTION_SIZE        0x1000000\r
 \r
-static CHAR8      *SectionTypeName[] = {\r
+STATIC CHAR8      *mSectionTypeName[] = {\r
   NULL,                                 // 0x00 - reserved\r
   "EFI_SECTION_COMPRESSION",            // 0x01\r
   "EFI_SECTION_GUID_DEFINED",           // 0x02\r
@@ -72,8 +72,8 @@ static CHAR8      *SectionTypeName[] = {
   "EFI_SECTION_PEI_DEPEX"               // 0x1B\r
 };\r
 \r
-static CHAR8      *CompressionTypeName[]    = { "PI_NONE", "PI_STD" };\r
-static CHAR8      *GUIDedSectionAttribue[]  = { NULL, "PROCESSING_REQUIRED", "AUTH_STATUS_VALID"};\r
+STATIC CHAR8      *mCompressionTypeName[]    = { "PI_NONE", "PI_STD" };\r
+STATIC CHAR8      *mGUIDedSectionAttribue[]  = { NULL, "PROCESSING_REQUIRED", "AUTH_STATUS_VALID"};\r
 \r
 //\r
 // Crc32 GUID section related definitions.\r
@@ -83,13 +83,8 @@ typedef struct {
   UINT32                    CRC32Checksum;\r
 } CRC32_SECTION_HEADER;\r
 \r
-static EFI_GUID  gZeroGuid                 = {0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}};\r
-static EFI_GUID  gEfiCrc32SectionGuid      = EFI_CRC32_GUIDED_SECTION_EXTRACTION_PROTOCOL_GUID;\r
-\r
-//\r
-// VerboseMode setting\r
-//\r
-static BOOLEAN VerboseMode = FALSE;\r
+STATIC EFI_GUID  mZeroGuid                 = {0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}};\r
+STATIC EFI_GUID  mEfiCrc32SectionGuid      = EFI_CRC32_GUIDED_SECTION_EXTRACTION_PROTOCOL_GUID;\r
 \r
 STATIC\r
 VOID \r
@@ -128,7 +123,7 @@ Routine Description:
 \r
 Arguments:\r
 \r
-  void\r
+  VOID\r
 \r
 Returns:\r
 \r
@@ -139,7 +134,7 @@ Returns:
   //\r
   // Summary usage\r
   //\r
-  fprintf (stdout, "Usage: %s [options] [input_file]\n\n", UTILITY_NAME);\r
+  fprintf (stdout, "\nUsage: %s [options] [input_file]\n\n", UTILITY_NAME);\r
   \r
   //\r
   // Copyright declaration\r
@@ -177,6 +172,8 @@ Returns:
                         Number is an integer value between 0000 and 9999\n\\r
                         used in Ver section.\n");\r
   fprintf (stdout, "  -v, --verbose         Turn on verbose output with informational messages.\n");\r
+  fprintf (stdout, "  -q, --quiet           Disable all messages except key message and fatal error\n");\r
+  fprintf (stdout, "  -d, --debug level     Enable debug messages, at input debug level.\n");\r
   fprintf (stdout, "  --version             Show program's version number and exit.\n");\r
   fprintf (stdout, "  -h, --help            Show this help message and exit.\n");\r
 }\r
@@ -283,6 +280,7 @@ Returns:
   fseek (InFile, 0, SEEK_END);\r
   InputFileLength = ftell (InFile);\r
   fseek (InFile, 0, SEEK_SET);\r
+  DebugMsg (NULL, 0, 9, "Input file", "File name is %s and File size is %d bytes", InputFileName[0], InputFileLength);\r
   //\r
   // Fill in the fields in the local section header structure\r
   //\r
@@ -295,6 +293,7 @@ Returns:
     Error (NULL, 0, 2000, "Invalid paramter", "%s file size (0x%X) exceeds section size limit(%dM).", InputFileName[0], TotalLength, MAX_SECTION_SIZE>>20);\r
     goto Done;\r
   }\r
+  VerboseMsg ("the size of the created section file is %d bytes", TotalLength);\r
   //\r
   // Now copy the size into the section header and write out the section header\r
   //\r
@@ -409,6 +408,7 @@ Returns:
     fseek (InFile, 0, SEEK_END);\r
     FileSize = ftell (InFile);\r
     fseek (InFile, 0, SEEK_SET);\r
+    DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %d bytes", InputFileName[Index], FileSize); \r
     //\r
     // Now read the contents of the file into the buffer\r
     // Buffer must be enough to contain the file content.\r
@@ -425,6 +425,9 @@ Returns:
     Size += FileSize;\r
   }\r
   \r
+  //\r
+  // Set the real required buffer size.\r
+  //\r
   if (Size > *BufferLength) {\r
     *BufferLength = Size;\r
     return EFI_BUFFER_TOO_SMALL;\r
@@ -561,6 +564,8 @@ Returns:
     }\r
   }\r
 \r
+  DebugMsg (NULL, 0, 9, "comprss file size", \r
+            "the original section size is %d bytes and the compressed section size is %d bytes", InputLength, CompressedLength);\r
   TotalLength = CompressedLength + sizeof (EFI_COMPRESSION_SECTION);\r
   if (TotalLength >= MAX_SECTION_SIZE) {\r
     Error (NULL, 0, 2000, "Invalid paramter", "The size of all files exceeds section size limit(%dM).", MAX_SECTION_SIZE>>20);\r
@@ -572,6 +577,7 @@ Returns:
     }\r
     return STATUS_ERROR;\r
   }\r
+  VerboseMsg ("the size of the created section file is %d bytes", TotalLength);\r
 \r
   //\r
   // Add the section header for the compressed data\r
@@ -675,7 +681,7 @@ Returns:
   //\r
   // Now data is in FileBuffer\r
   //\r
-  if (CompareGuid (VendorGuid, &gEfiCrc32SectionGuid) == 0) {\r
+  if (CompareGuid (VendorGuid, &mEfiCrc32SectionGuid) == 0) {\r
     //\r
     // Default Guid section is CRC32.\r
     //\r
@@ -693,7 +699,7 @@ Returns:
     Crc32GuidSect.GuidSectionHeader.CommonHeader.Size[0]  = (UINT8) (TotalLength & 0xff);\r
     Crc32GuidSect.GuidSectionHeader.CommonHeader.Size[1]  = (UINT8) ((TotalLength & 0xff00) >> 8);\r
     Crc32GuidSect.GuidSectionHeader.CommonHeader.Size[2]  = (UINT8) ((TotalLength & 0xff0000) >> 16);\r
-    memcpy (&(Crc32GuidSect.GuidSectionHeader.SectionDefinitionGuid), &gEfiCrc32SectionGuid, sizeof (EFI_GUID));\r
+    memcpy (&(Crc32GuidSect.GuidSectionHeader.SectionDefinitionGuid), &mEfiCrc32SectionGuid, sizeof (EFI_GUID));\r
     Crc32GuidSect.GuidSectionHeader.Attributes  = EFI_GUIDED_SECTION_AUTH_STATUS_VALID;\r
     Crc32GuidSect.GuidSectionHeader.DataOffset  = sizeof (CRC32_SECTION_HEADER);\r
     Crc32GuidSect.CRC32Checksum                 = Crc32Checksum;\r
@@ -716,10 +722,12 @@ Returns:
     VendorGuidSect.DataOffset  = sizeof (EFI_GUID_DEFINED_SECTION);\r
     fwrite (&VendorGuidSect, sizeof (EFI_GUID_DEFINED_SECTION), 1, OutFile);  \r
   }\r
+  DebugMsg (NULL, 0, 9, "Guided section", "Data offset is %d", VendorGuidSect.DataOffset);\r
+  VerboseMsg ("the size of the created section file is %d bytes", TotalLength);\r
 \r
   fwrite (FileBuffer, InputLength, 1, OutFile);\r
   free (FileBuffer);\r
-\r
+  \r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -755,7 +763,7 @@ Returns:
   CHAR8                     *SectionName;\r
   CHAR8                     *CompressionName;\r
   CHAR8                     *StringBuffer;\r
-  EFI_GUID                  VendorGuid = gZeroGuid;\r
+  EFI_GUID                  VendorGuid = mZeroGuid;\r
   INT32                     VersionNumber;\r
   UINT8                     SectType;\r
   UINT8                     SectCompSubType;\r
@@ -764,6 +772,7 @@ Returns:
   UINT32                    InputLength;\r
   UINT8                     *FileBuffer;\r
   EFI_STATUS                Status;\r
+  UINT64                    LogLevel;\r
   \r
   InputFileName         = NULL;\r
   OutputFileName        = NULL;\r
@@ -780,11 +789,12 @@ Returns:
   FileBuffer            = NULL;\r
   InputLength           = 0;\r
   Status                = STATUS_SUCCESS;\r
+  LogLevel              = 0;\r
   \r
   SetUtilityName (UTILITY_NAME);\r
   \r
   if (argc == 1) {\r
-    Error (NULL, 0, 1001, "Missing options", "Input file");\r
+    Error (NULL, 0, 1001, "Missing options", "No options input");\r
     Usage ();\r
     return STATUS_ERROR;\r
   }\r
@@ -840,9 +850,9 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-r") == 0) || (stricmp (argv[0], "--attributes") == 0)) {\r
-      if (stricmp (argv[1], GUIDedSectionAttribue[EFI_GUIDED_SECTION_PROCESSING_REQUIRED]) == 0) {\r
+      if (stricmp (argv[1], mGUIDedSectionAttribue[EFI_GUIDED_SECTION_PROCESSING_REQUIRED]) == 0) {\r
         SectGuidAttribute |= EFI_GUIDED_SECTION_PROCESSING_REQUIRED;\r
-      } else if (stricmp (argv[1], GUIDedSectionAttribue[EFI_GUIDED_SECTION_AUTH_STATUS_VALID]) == 0) {\r
+      } else if (stricmp (argv[1], mGUIDedSectionAttribue[EFI_GUIDED_SECTION_AUTH_STATUS_VALID]) == 0) {\r
         SectGuidAttribute |= EFI_GUIDED_SECTION_AUTH_STATUS_VALID;\r
       } else {\r
         Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
@@ -878,11 +888,38 @@ Returns:
     }\r
 \r
     if ((stricmp (argv[0], "-v") == 0) || (stricmp (argv[0], "--verbose") == 0)) {\r
-      VerboseMode = TRUE;\r
+      SetPrintLevel (VERBOSE_LOG_LEVEL);\r
+      VerboseMsg ("Verbose output Mode Set!");\r
+      argc --;\r
+      argv ++;\r
+      continue;\r
+    }\r
+\r
+    if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) {\r
+      SetPrintLevel (KEY_LOG_LEVEL);\r
+      KeyMsg ("Quiet output Mode Set!");\r
       argc --;\r
       argv ++;\r
       continue;\r
     }\r
+\r
+    if ((stricmp (argv[0], "-d") == 0) || (stricmp (argv[0], "--debug") == 0)) {\r
+      Status = AsciiStringToUint64 (argv[1], FALSE, &LogLevel);\r
+      if (EFI_ERROR (Status)) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]);\r
+        goto Finish;\r
+      }\r
+      if (LogLevel > 9) {\r
+        Error (NULL, 0, 1003, "Invalid option value", "Debug Level range is 0~9, currnt input level is %d", LogLevel);\r
+        goto Finish;\r
+      }\r
+      SetPrintLevel (LogLevel);\r
+      DebugMsg (NULL, 0, 9, "Debug Mode Set", "Debug Output Mode Level %s is set!", argv[1]);\r
+      argc -= 2;\r
+      argv += 2;\r
+      continue;\r
+    }\r
+\r
     //\r
     // Get Input file name\r
     //\r
@@ -916,98 +953,127 @@ Returns:
     argv ++;\r
   }\r
 \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool start.\n", UTILITY_NAME);\r
-  }\r
+  VerboseMsg ("%s tool start.", UTILITY_NAME);\r
+\r
   //\r
   // Parse all command line parameters to get the corresponding section type.\r
   //\r
+  VerboseMsg ("Section type is %s", SectionName);\r
   if (SectionName == NULL) {\r
     //\r
     // No specified Section type, default is SECTION_ALL.\r
     //\r
     SectType = EFI_SECTION_ALL;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_COMPRESSION]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_COMPRESSION]) == 0) {\r
     SectType     = EFI_SECTION_COMPRESSION;\r
     if (CompressionName == NULL) {\r
       //\r
       // Default is PI_STD compression algorithm.\r
       //\r
       SectCompSubType = EFI_STANDARD_COMPRESSION;\r
-    } else if (stricmp (CompressionName, CompressionTypeName[EFI_NOT_COMPRESSED]) == 0) {\r
+    } else if (stricmp (CompressionName, mCompressionTypeName[EFI_NOT_COMPRESSED]) == 0) {\r
       SectCompSubType = EFI_NOT_COMPRESSED;\r
-    } else if (stricmp (CompressionName, CompressionTypeName[EFI_STANDARD_COMPRESSION]) == 0) {\r
+    } else if (stricmp (CompressionName, mCompressionTypeName[EFI_STANDARD_COMPRESSION]) == 0) {\r
       SectCompSubType = EFI_STANDARD_COMPRESSION;\r
     } else {\r
       Error (NULL, 0, 1003, "Invalid option value", "--compress = %s", CompressionName);\r
       goto Finish;\r
     }\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_GUID_DEFINED]) == 0) {\r
+    VerboseMsg ("Compress method is %s", mCompressionTypeName [SectCompSubType]);\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_GUID_DEFINED]) == 0) {\r
     SectType     = EFI_SECTION_GUID_DEFINED;\r
 \r
-    if (CompareGuid (&VendorGuid, &gZeroGuid) == 0) {\r
-      memcpy (&VendorGuid, &gEfiCrc32SectionGuid, sizeof (EFI_GUID));\r
+    if (CompareGuid (&VendorGuid, &mZeroGuid) == 0) {\r
+      memcpy (&VendorGuid, &mEfiCrc32SectionGuid, sizeof (EFI_GUID));\r
     }\r
     \r
     if (SectGuidAttribute == 0) {\r
       SectGuidAttribute = EFI_GUIDED_SECTION_PROCESSING_REQUIRED;\r
     }\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_PE32]) == 0) {\r
+    VerboseMsg ("Vendor Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", \r
+                VendorGuid.Data1,\r
+                VendorGuid.Data2,\r
+                VendorGuid.Data3,\r
+                VendorGuid.Data4[0],\r
+                VendorGuid.Data4[1],\r
+                VendorGuid.Data4[2],\r
+                VendorGuid.Data4[3],\r
+                VendorGuid.Data4[4],\r
+                VendorGuid.Data4[5],\r
+                VendorGuid.Data4[6],\r
+                VendorGuid.Data4[7]);\r
+    if ((SectGuidAttribute & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) != 0) {\r
+      VerboseMsg ("Guid Attribute is %s", mGUIDedSectionAttribue[EFI_GUIDED_SECTION_PROCESSING_REQUIRED]);\r
+    }\r
+    if ((SectGuidAttribute & EFI_GUIDED_SECTION_AUTH_STATUS_VALID) != 0) {\r
+      VerboseMsg ("Guid Attribute is %s", mGUIDedSectionAttribue[EFI_GUIDED_SECTION_AUTH_STATUS_VALID]);\r
+    }\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_PE32]) == 0) {\r
     SectType = EFI_SECTION_PE32;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_PIC]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_PIC]) == 0) {\r
     SectType = EFI_SECTION_PIC;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_TE]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_TE]) == 0) {\r
     SectType = EFI_SECTION_TE;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_DXE_DEPEX]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_DXE_DEPEX]) == 0) {\r
     SectType = EFI_SECTION_DXE_DEPEX;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_VERSION]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_VERSION]) == 0) {\r
     SectType = EFI_SECTION_VERSION;\r
     if (VersionNumber < 0 || VersionNumber > 9999) {\r
       Error (NULL, 0, 1003, "Invalid option value", "%d is not in 0~9999", VersionNumber);\r
       goto Finish;\r
     }\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_USER_INTERFACE]) == 0) {\r
+    VerboseMsg ("Version section number is %d", VersionNumber);\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_USER_INTERFACE]) == 0) {\r
     SectType = EFI_SECTION_USER_INTERFACE;\r
     if (StringBuffer[0] == '\0') {\r
       Error (NULL, 0, 1001, "Missing option", "user interface string");\r
       goto Finish;\r
     }\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_COMPATIBILITY16]) == 0) {\r
+    VerboseMsg ("UI section string name is %s", StringBuffer);\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_COMPATIBILITY16]) == 0) {\r
     SectType = EFI_SECTION_COMPATIBILITY16;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_FIRMWARE_VOLUME_IMAGE]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_FIRMWARE_VOLUME_IMAGE]) == 0) {\r
     SectType = EFI_SECTION_FIRMWARE_VOLUME_IMAGE;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_FREEFORM_SUBTYPE_GUID]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_FREEFORM_SUBTYPE_GUID]) == 0) {\r
     SectType = EFI_SECTION_FREEFORM_SUBTYPE_GUID;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_RAW]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_RAW]) == 0) {\r
     SectType = EFI_SECTION_RAW;\r
-  } else if (stricmp (SectionName, SectionTypeName[EFI_SECTION_PEI_DEPEX]) == 0) {\r
+  } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_PEI_DEPEX]) == 0) {\r
     SectType = EFI_SECTION_PEI_DEPEX;\r
   } else {\r
     Error (NULL, 0, 1003, "Invalid option value", "SectionType = %s", SectionName);\r
     goto Finish;\r
   }\r
   \r
+  //\r
+  // Check whether there is input file\r
+  //  \r
   if ((SectType != EFI_SECTION_VERSION) && (SectType != EFI_SECTION_USER_INTERFACE)) {\r
     //\r
-    // The input file are required for those section type.\r
+    // The input file are required for other section type.\r
     //\r
     if (InputFileNum == 0) {\r
       Error (NULL, 0, 1001, "Missing options", "Input files");\r
       goto Finish;\r
     }\r
   }\r
-  \r
   //\r
-  // Open output file\r
+  // Check whether there is output file\r
   //\r
+  for (Index = 0; Index < InputFileNum; Index ++) {\r
+    VerboseMsg ("the %dth input file name is %s", Index, InputFileName[Index]);\r
+  }\r
   if (OutputFileName == NULL) {\r
     Error (NULL, 0, 1001, "Missing options", "Output file");\r
     goto Finish;\r
     // OutFile = stdout;\r
-  } else {\r
-    OutFile = fopen (OutputFileName, "wb");\r
   }\r
+  VerboseMsg ("Output file name is %s", OutputFileName);\r
 \r
+  //\r
+  // Open output file\r
+  //\r
+  OutFile = fopen (OutputFileName, "wb");\r
   if (OutFile == NULL) {\r
     Error (NULL, 0, 0001, "Error opening file", OutputFileName);\r
     goto Finish;\r
@@ -1057,6 +1123,7 @@ Returns:
     fwrite (&CommonSect, sizeof (CommonSect), 1, OutFile);\r
     fwrite (&VersionNumber, sizeof (UINT16), 1, OutFile);\r
     Ascii2UnicodeWriteString (StringBuffer, OutFile);\r
+    VerboseMsg ("the size of the created section file is %d bytes", Index);\r
     break;\r
 \r
   case EFI_SECTION_USER_INTERFACE:\r
@@ -1069,6 +1136,7 @@ Returns:
     memcpy (&CommonSect.Size, &Index, 3);\r
     fwrite (&CommonSect, sizeof (CommonSect), 1, OutFile);\r
     Ascii2UnicodeWriteString (StringBuffer, OutFile);\r
+    VerboseMsg ("the size of the created section file is %d bytes", Index);\r
     break;\r
 \r
   case EFI_SECTION_ALL:\r
@@ -1107,7 +1175,7 @@ Returns:
     if (FileBuffer != NULL) {\r
       free (FileBuffer);\r
     }\r
-    \r
+    VerboseMsg ("the size of the created section file is %d bytes", InputLength);\r
     break;\r
   default:\r
     //\r
@@ -1131,9 +1199,7 @@ Finish:
     fclose (OutFile);\r
   }\r
   \r
-  if (VerboseMode) {\r
-    fprintf (stdout, "%s tool done with return code is 0x%x.\n", UTILITY_NAME, GetUtilityStatus ());  \r
-  }\r
+  VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ());\r
 \r
   return GetUtilityStatus ();\r
 }\r
index 7719575..8a2f146 100644 (file)
@@ -2,7 +2,7 @@
 
 APPNAME = GenSec
 
-LIBS = Common.lib
+LIBS = $(LIB_PATH)\Common.lib
 
 OBJECTS = GenSec.obj