]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Library/DebugLib.h
MdePkg/ProcessorBind: add defines for page allocation granularity
[mirror_edk2.git] / MdePkg / Include / Library / DebugLib.h
index bf38fd8bf573506f905f368c2ef2e60611b6212b..3a910e6a208b71d57786fa2685aa49d641044cec 100644 (file)
@@ -8,11 +8,11 @@
   of size reduction when compiler optimization is disabled. If MDEPKG_NDEBUG is\r
   defined, then debug and assert related macros wrapped by it are the NULL implementations.\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation<BR>\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
+Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution.  \r
+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
@@ -39,17 +39,21 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define DEBUG_WARN      0x00000002  // Warnings\r
 #define DEBUG_LOAD      0x00000004  // Load events\r
 #define DEBUG_FS        0x00000008  // EFI File system\r
-#define DEBUG_POOL      0x00000010  // Alloc & Free's\r
-#define DEBUG_PAGE      0x00000020  // Alloc & Free's\r
-#define DEBUG_INFO      0x00000040  // Verbose\r
-#define DEBUG_DISPATCH  0x00000080  // PEI/DXE Dispatchers\r
+#define DEBUG_POOL      0x00000010  // Alloc & Free (pool)\r
+#define DEBUG_PAGE      0x00000020  // Alloc & Free (page)\r
+#define DEBUG_INFO      0x00000040  // Informational debug messages\r
+#define DEBUG_DISPATCH  0x00000080  // PEI/DXE/SMM Dispatchers\r
 #define DEBUG_VARIABLE  0x00000100  // Variable\r
 #define DEBUG_BM        0x00000400  // Boot Manager\r
 #define DEBUG_BLKIO     0x00001000  // BlkIo Driver\r
-#define DEBUG_NET       0x00004000  // SNI Driver\r
+#define DEBUG_NET       0x00004000  // Network Io Driver\r
 #define DEBUG_UNDI      0x00010000  // UNDI Driver\r
-#define DEBUG_LOADFILE  0x00020000  // UNDI Driver\r
+#define DEBUG_LOADFILE  0x00020000  // LoadFile\r
 #define DEBUG_EVENT     0x00080000  // Event messages\r
+#define DEBUG_GCD       0x00100000  // Global Coherency Database changes\r
+#define DEBUG_CACHE     0x00200000  // Memory range cachability changes\r
+#define DEBUG_VERBOSE   0x00400000  // Detailed debug messages that may\r
+                                    // significantly impact boot performance\r
 #define DEBUG_ERROR     0x80000000  // Error\r
 \r
 //\r
@@ -70,20 +74,21 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define EFI_D_UNDI      DEBUG_UNDI\r
 #define EFI_D_LOADFILE  DEBUG_LOADFILE\r
 #define EFI_D_EVENT     DEBUG_EVENT\r
+#define EFI_D_VERBOSE   DEBUG_VERBOSE\r
 #define EFI_D_ERROR     DEBUG_ERROR\r
 \r
 /**\r
   Prints a debug message to the debug output device if the specified error level is enabled.\r
 \r
-  If any bit in ErrorLevel is also set in PcdDebugPrintErrorLevel, then print \r
-  the message specified by Format and the associated variable argument list to \r
-  the debug output device.\r
+  If any bit in ErrorLevel is also set in DebugPrintErrorLevelLib function \r
+  GetDebugPrintErrorLevel (), then print the message specified by Format and the \r
+  associated variable argument list to the debug output device.\r
 \r
   If Format is NULL, then ASSERT().\r
 \r
   @param  ErrorLevel  The error level of the debug message.\r
-  @param  Format      Format string for the debug message to print.\r
-  @param  ...         Variable argument list whose contents are accessed \r
+  @param  Format      The format string for the debug message to print.\r
+  @param  ...         The variable argument list whose contents are accessed \r
                       based on the format string specified by Format.\r
 \r
 **/\r
@@ -112,9 +117,9 @@ DebugPrint (
   If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.\r
   If Description is NULL, then a <Description> string of "(NULL) Description" is printed.\r
 \r
-  @param  FileName     Pointer to the name of the source file that generated the assert condition.\r
+  @param  FileName     The pointer to the name of the source file that generated the assert condition.\r
   @param  LineNumber   The line number in the source file that generated the assert condition\r
-  @param  Description  Pointer to the description of the assert condition.\r
+  @param  Description  The pointer to the description of the assert condition.\r
 \r
 **/\r
 VOID\r
@@ -135,10 +140,10 @@ DebugAssert (
   If Buffer is NULL, then ASSERT().\r
   If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
 \r
-  @param   Buffer  Pointer to the target buffer to be filled with PcdDebugClearMemoryValue.\r
-  @param   Length  Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue. \r
+  @param   Buffer  The pointer to the target buffer to be filled with PcdDebugClearMemoryValue.\r
+  @param   Length  The number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue. \r
 \r
-  @return  Buffer  Pointer to the target buffer filled with PcdDebugClearMemoryValue.\r
+  @return  Buffer  The pointer to the target buffer filled with PcdDebugClearMemoryValue.\r
 \r
 **/\r
 VOID *\r
@@ -153,7 +158,7 @@ DebugClearMemory (
   Returns TRUE if ASSERT() macros are enabled.\r
 \r
   This function returns TRUE if the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of \r
-  PcdDebugProperyMask is set.  Otherwise FALSE is returned.\r
+  PcdDebugProperyMask is set.  Otherwise, FALSE is returned.\r
 \r
   @retval  TRUE    The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set.\r
   @retval  FALSE   The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear.\r
@@ -170,7 +175,7 @@ DebugAssertEnabled (
   Returns TRUE if DEBUG() macros are enabled.\r
 \r
   This function returns TRUE if the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of \r
-  PcdDebugProperyMask is set.  Otherwise FALSE is returned.\r
+  PcdDebugProperyMask is set.  Otherwise, FALSE is returned.\r
 \r
   @retval  TRUE    The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set.\r
   @retval  FALSE   The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is clear.\r
@@ -187,7 +192,7 @@ DebugPrintEnabled (
   Returns TRUE if DEBUG_CODE() macros are enabled.\r
 \r
   This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of \r
-  PcdDebugProperyMask is set.  Otherwise FALSE is returned.\r
+  PcdDebugProperyMask is set.  Otherwise, FALSE is returned.\r
 \r
   @retval  TRUE    The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set.\r
   @retval  FALSE   The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is clear.\r
@@ -204,7 +209,7 @@ DebugCodeEnabled (
   Returns TRUE if DEBUG_CLEAR_MEMORY() macro is enabled.\r
 \r
   This function returns TRUE if the DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED bit of \r
-  PcdDebugProperyMask is set.  Otherwise FALSE is returned.\r
+  PcdDebugProperyMask is set.  Otherwise, FALSE is returned.\r
 \r
   @retval  TRUE    The DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set.\r
   @retval  FALSE   The DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is clear.\r
@@ -216,6 +221,20 @@ DebugClearMemoryEnabled (
   VOID\r
   );\r
 \r
+/**\r
+  Returns TRUE if any one of the bit is set both in ErrorLevel and PcdFixedDebugPrintErrorLevel.\r
+\r
+  This function compares the bit mask of ErrorLevel and PcdFixedDebugPrintErrorLevel.\r
+\r
+  @retval  TRUE    Current ErrorLevel is supported.\r
+  @retval  FALSE   Current ErrorLevel is not supported.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+DebugPrintLevelEnabled (\r
+  IN  CONST UINTN        ErrorLevel\r
+  );\r
 \r
 /**  \r
   Internal worker macro that calls DebugAssert().\r
@@ -234,13 +253,25 @@ DebugClearMemoryEnabled (
 \r
   This macro calls DebugPrint() passing in the debug error level, a format \r
   string, and a variable argument list.\r
+  __VA_ARGS__ is not supported by EBC compiler, Microsoft Visual Studio .NET 2003\r
+  and Microsoft Windows Server 2003 Driver Development Kit (Microsoft WINDDK) version 3790.1830.\r
 \r
   @param  Expression  Expression containing an error level, a format string, \r
                       and a variable argument list based on the format string.\r
 \r
 **/\r
-#define _DEBUG(Expression)   DebugPrint Expression\r
 \r
+#if !defined(MDE_CPU_EBC) && (!defined (_MSC_VER) || _MSC_VER > 1400)\r
+  #define _DEBUG_PRINT(PrintLevel, ...)              \\r
+    do {                                             \\r
+      if (DebugPrintLevelEnabled (PrintLevel)) {     \\r
+        DebugPrint (PrintLevel, ##__VA_ARGS__);      \\r
+      }                                              \\r
+    } while (FALSE)\r
+  #define _DEBUG(Expression)   _DEBUG_PRINT Expression\r
+#else\r
+#define _DEBUG(Expression)   DebugPrint Expression\r
+#endif\r
 \r
 /**  \r
   Macro that calls DebugAssert() if an expression evaluates to FALSE.\r
@@ -251,7 +282,7 @@ DebugClearMemoryEnabled (
   DebugAssert() is called passing in the source filename, source line number, \r
   and Expression.\r
 \r
-  @param  Expression  Boolean expression\r
+  @param  Expression  Boolean expression.\r
 \r
 **/\r
 #if !defined(MDEPKG_NDEBUG)       \r
@@ -260,6 +291,7 @@ DebugClearMemoryEnabled (
       if (DebugAssertEnabled ()) {  \\r
         if (!(Expression)) {        \\r
           _ASSERT (Expression);     \\r
+          ANALYZER_UNREACHABLE ();  \\r
         }                           \\r
       }                             \\r
     } while (FALSE)\r
@@ -316,6 +348,33 @@ DebugClearMemoryEnabled (
   #define ASSERT_EFI_ERROR(StatusParameter)\r
 #endif\r
 \r
+/**\r
+  Macro that calls DebugAssert() if a RETURN_STATUS evaluates to an error code.\r
+\r
+  If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED\r
+  bit of PcdDebugProperyMask is set, then this macro evaluates the\r
+  RETURN_STATUS value specified by StatusParameter.  If StatusParameter is an\r
+  error code, then DebugAssert() is called passing in the source filename,\r
+  source line number, and StatusParameter.\r
+\r
+  @param  StatusParameter  RETURN_STATUS value to evaluate.\r
+\r
+**/\r
+#if !defined(MDEPKG_NDEBUG)\r
+  #define ASSERT_RETURN_ERROR(StatusParameter)                          \\r
+    do {                                                                \\r
+      if (DebugAssertEnabled ()) {                                      \\r
+        if (RETURN_ERROR (StatusParameter)) {                           \\r
+          DEBUG ((DEBUG_ERROR, "\nASSERT_RETURN_ERROR (Status = %r)\n", \\r
+            StatusParameter));                                          \\r
+          _ASSERT (!RETURN_ERROR (StatusParameter));                    \\r
+        }                                                               \\r
+      }                                                                 \\r
+    } while (FALSE)\r
+#else\r
+  #define ASSERT_RETURN_ERROR(StatusParameter)\r
+#endif\r
+\r
 /**  \r
   Macro that calls DebugAssert() if a protocol is already installed in the \r
   handle database.\r
@@ -335,7 +394,7 @@ DebugClearMemoryEnabled (
                   parameter that may be NULL.  If it is NULL, then the entire \r
                   handle database is searched.\r
 \r
-  @param  Guid    Pointer to a protocol GUID.\r
+  @param  Guid    The pointer to a protocol GUID.\r
 \r
 **/\r
 #if !defined(MDEPKG_NDEBUG)\r
@@ -372,7 +431,7 @@ DebugClearMemoryEnabled (
 \r
 \r
 /**  \r
-  Macro that marks the end of debug source code.\r
+  The macro that marks the end of debug source code.\r
 \r
   If the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set, \r
   then this macro marks the end of source code that is included in a module.  \r
@@ -384,7 +443,7 @@ DebugClearMemoryEnabled (
 \r
 \r
 /**  \r
-  Macro that declares a section of debug source code.\r
+  The macro that declares a section of debug source code.\r
 \r
   If the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set, \r
   then the source code specified by Expression is included in a module.  \r
@@ -398,12 +457,12 @@ DebugClearMemoryEnabled (
 \r
 \r
 /**  \r
-  Macro that calls DebugClearMemory() to clear a buffer to a default value.\r
+  The macro that calls DebugClearMemory() to clear a buffer to a default value.\r
 \r
   If the DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set, \r
   then this macro calls DebugClearMemory() passing in Address and Length.\r
 \r
-  @param  Address  Pointer to a buffer.\r
+  @param  Address  The pointer to a buffer.\r
   @param  Length   The number of bytes in the buffer to set.\r
 \r
 **/\r
@@ -419,13 +478,13 @@ DebugClearMemoryEnabled (
   Macro that calls DebugAssert() if the containing record does not have a \r
   matching signature.  If the signatures matches, then a pointer to the data \r
   structure that contains a specified field of that data structure is returned.  \r
-  This is a light weight method hide information by placing a public data \r
+  This is a lightweight method hide information by placing a public data \r
   structure inside a larger private data structure and using a pointer to the \r
   public data structure to retrieve a pointer to the private data structure.\r
 \r
   If MDEPKG_NDEBUG is defined or the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit \r
   of PcdDebugProperyMask is clear, then this macro computes the offset, in bytes,\r
-  of field specified by Field from the beginning of the  data structure specified \r
+  of the field specified by Field from the beginning of the data structure specified \r
   by TYPE.  This offset is subtracted from Record, and is used to return a pointer \r
   to a data structure of the type specified by TYPE.\r
 \r
@@ -445,7 +504,7 @@ DebugClearMemoryEnabled (
   If TYPE does not contain a field called Signature, then the module will not \r
   compile.\r
 \r
-  @param  Record         Pointer to the field specified by Field within a data \r
+  @param  Record         The pointer to the field specified by Field within a data \r
                          structure of type TYPE.\r
 \r
   @param  TYPE           The name of the data structure type to return  This \r