]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OldMdePkg/Include/Library/ReportStatusCodeLib.h
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Include / Library / ReportStatusCodeLib.h
diff --git a/OldMdePkg/Include/Library/ReportStatusCodeLib.h b/OldMdePkg/Include/Library/ReportStatusCodeLib.h
new file mode 100644 (file)
index 0000000..6b32ddb
--- /dev/null
@@ -0,0 +1,632 @@
+/** @file\r
+  Report Status Code Library public .h file\r
+\r
+  Copyright (c) 2006, 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
+**/\r
+\r
+#ifndef __REPORT_STATUS_CODE_LIB_H__\r
+#define __REPORT_STATUS_CODE_LIB_H__\r
+\r
+//\r
+// Declare bits for PcdReportStatusCodePropertyMask\r
+//\r
+#define REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED          0x00000001\r
+#define REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED             0x00000002\r
+#define REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED             0x00000004\r
+\r
+//\r
+// Extended Data structure definitions with EFI_STATUS_CODE_DATA headers removed\r
+//\r
+\r
+///\r
+/// Voltage Extended Error Data\r
+///\r
+typedef struct {\r
+  EFI_EXP_BASE10_DATA   Voltage;\r
+  EFI_EXP_BASE10_DATA   Threshold;\r
+} REPORT_STATUS_CODE_LIBRARY_COMPUTING_UNIT_VOLTAGE_ERROR_DATA;\r
+\r
+///\r
+/// Microcode Update Extended Error Data\r
+///\r
+typedef struct {\r
+  UINT32                Version;\r
+} REPORT_STATUS_CODE_LIBRARY_COMPUTING_UNIT_MICROCODE_UPDATE_ERROR_DATA;\r
+\r
+///\r
+/// Asynchronous Timer Extended Error Data\r
+///\r
+typedef struct {\r
+  EFI_EXP_BASE10_DATA   TimerLimit;\r
+} REPORT_STATUS_CODE_LIBRARY_COMPUTING_UNIT_TIMER_EXPIRED_ERROR_DATA;\r
+\r
+///\r
+/// Host Processor Mismatch Extended Error Data\r
+///\r
+typedef struct {\r
+  UINT32                Instance;\r
+  UINT16                Attributes;\r
+} REPORT_STATUS_CODE_LIBRARY_HOST_PROCESSOR_MISMATCH_ERROR_DATA;\r
+\r
+///\r
+/// Thermal Extended Error Data\r
+///\r
+typedef struct {\r
+  EFI_EXP_BASE10_DATA   Temperature;\r
+  EFI_EXP_BASE10_DATA   Threshold;\r
+} REPORT_STATUS_CODE_LIBRARY_COMPUTING_UNIT_THERMAL_ERROR_DATA;\r
+\r
+///\r
+/// Processor Disabled Extended Error Data\r
+///\r
+typedef struct {\r
+  UINT32                Cause;\r
+  BOOLEAN               SoftwareDisabled;\r
+} REPORT_STATUS_CODE_LIBRARY_COMPUTING_UNIT_CPU_DISABLED_ERROR_DATA;\r
+\r
+///\r
+/// Embedded cache init extended data\r
+///\r
+typedef struct {\r
+  UINT32                Level;\r
+  EFI_INIT_CACHE_TYPE   Type;\r
+} REPORT_STATUS_CODE_LIBRARY_CACHE_INIT_DATA;\r
+\r
+///\r
+/// Memory Extended Error Data\r
+///\r
+typedef struct {\r
+  EFI_MEMORY_ERROR_GRANULARITY  Granularity;\r
+  EFI_MEMORY_ERROR_OPERATION    Operation;\r
+  UINTN                         Syndrome;\r
+  EFI_PHYSICAL_ADDRESS          Address;\r
+  UINTN                         Resolution;\r
+} REPORT_STATUS_CODE_LIBRARY_MEMORY_EXTENDED_ERROR_DATA;\r
+\r
+///\r
+/// DIMM number\r
+///\r
+typedef struct {\r
+  UINT16                Array;\r
+  UINT16                Device;\r
+} REPORT_STATUS_CODE_LIBRARY_STATUS_CODE_DIMM_NUMBER;\r
+\r
+///\r
+/// Memory Module Mismatch Extended Error Data\r
+///\r
+typedef struct {\r
+  EFI_STATUS_CODE_DIMM_NUMBER Instance;\r
+} REPORT_STATUS_CODE_LIBRARY_MEMORY_MODULE_MISMATCH_ERROR_DATA;\r
+\r
+///\r
+/// Memory Range Extended Data\r
+///\r
+typedef struct {\r
+  EFI_PHYSICAL_ADDRESS  Start;\r
+  EFI_PHYSICAL_ADDRESS  Length;\r
+} REPORT_STATUS_CODE_LIBRARY_MEMORY_RANGE_EXTENDED_DATA;\r
+\r
+///\r
+/// Device handle Extended Data. Used for many\r
+/// errors and progress codes to point to the device.\r
+///\r
+typedef struct {\r
+  EFI_HANDLE            Handle;\r
+} REPORT_STATUS_CODE_LIBRARY_DEVICE_HANDLE_EXTENDED_DATA;\r
+\r
+typedef struct {\r
+  UINT8                                *DevicePath;\r
+} REPORT_STATUS_CODE_LIBRARY_DEVICE_PATH_EXTENDED_DATA;\r
+\r
+typedef struct {\r
+  EFI_HANDLE                     ControllerHandle;\r
+  EFI_HANDLE                     DriverBindingHandle;\r
+  UINT16                         DevicePathSize;\r
+  UINT8                          *RemainingDevicePath;\r
+} REPORT_STATUS_CODE_LIBRARY_STATUS_CODE_START_EXTENDED_DATA;\r
+\r
+///\r
+/// Resource Allocation Failure Extended Error Data\r
+///\r
+typedef struct {\r
+  UINT32                             Bar;\r
+  UINT16                             DevicePathSize;\r
+  UINT16                             ReqResSize;\r
+  UINT16                             AllocResSize;\r
+  UINT8                              *DevicePath;\r
+  UINT8                              *ReqRes;\r
+  UINT8                              *AllocRes;\r
+} REPORT_STATUS_CODE_LIBRARY_RESOURCE_ALLOC_FAILURE_ERROR_DATA;\r
+\r
+///\r
+/// Extended Error Data for Assert\r
+///\r
+typedef struct {\r
+  UINT32                      LineNumber;\r
+  UINT32                      FileNameSize;\r
+  EFI_STATUS_CODE_STRING_DATA *FileName;\r
+} REPORT_STATUS_CODE_LIBRARY_DEBUG_ASSERT_DATA;\r
+\r
+///\r
+/// System Context Data EBC/IA32/IPF\r
+///\r
+typedef struct {\r
+  EFI_STATUS_CODE_EXCEP_SYSTEM_CONTEXT  Context;\r
+} REPORT_STATUS_CODE_LIBRARY_STATUS_CODE_EXCEP_EXTENDED_DATA;\r
+\r
+///\r
+/// Legacy Oprom extended data\r
+///\r
+typedef struct {\r
+  EFI_HANDLE            DeviceHandle;\r
+  EFI_PHYSICAL_ADDRESS  RomImageBase;\r
+} REPORT_STATUS_CODE_LIBRARY_LEGACY_OPROM_EXTENDED_DATA;\r
+\r
+//\r
+// Extern for the modules Caller ID GUID\r
+//\r
+extern EFI_GUID gEfiCallerIdGuid;\r
+\r
+/**\r
+  Converts a status code to an 8-bit POST code value.\r
+\r
+  Converts the status code specified by CodeType and Value to an 8-bit POST code \r
+  and returns the 8-bit POST code in PostCode.  If CodeType is an \r
+  EFI_PROGRESS_CODE or CodeType is an EFI_ERROR_CODE, then bits 0..4 of PostCode \r
+  are set to bits 16..20 of Value, and bits 5..7 of PostCode are set to bits \r
+  24..26 of Value., and TRUE is returned.  Otherwise, FALSE is returned.  \r
+\r
+  If PostCode is NULL, then ASSERT().\r
+\r
+  @param  CodeType  The type of status code being converted.\r
+  @param  Value     The status code value being converted.\r
+  @param  PostCode  A pointer to the 8-bit POST code value to return. \r
+\r
+  @retval  TRUE   The status code specified by CodeType and Value was converted \r
+                  to an 8-bit POST code and returned in  PostCode.\r
+  @retval  FALSE  The status code specified by CodeType and Value could not be \r
+                  converted to an 8-bit POST code value.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+CodeTypeToPostCode (\r
+  IN  EFI_STATUS_CODE_TYPE   CodeType,\r
+  IN  EFI_STATUS_CODE_VALUE  Value,\r
+  OUT UINT8                  *PostCode\r
+  );\r
+\r
+\r
+/**\r
+  Extracts ASSERT() information from a status code structure.\r
+\r
+  Converts the status code specified by CodeType, Value, and Data to the ASSERT()\r
+  arguments specified by Filename, Description, and LineNumber.  If CodeType is \r
+  an EFI_ERROR_CODE, and CodeType has a severity of EFI_ERROR_UNRECOVERED, and \r
+  Value has an operation mask of EFI_SW_EC_ILLEGAL_SOFTWARE_STATE, extract \r
+  Filename, Description, and LineNumber from the optional data area of the \r
+  status code buffer specified by Data.  The optional data area of Data contains \r
+  a Null-terminated ASCII string for the FileName, followed by a Null-terminated \r
+  ASCII string for the Description, followed by a 32-bit LineNumber.  If the \r
+  ASSERT() information could be extracted from Data, then return TRUE.  \r
+  Otherwise, FALSE is returned.  \r
+\r
+  If Data is NULL, then ASSERT().\r
+  If Filename is NULL, then ASSERT().\r
+  If Description is NULL, then ASSERT().\r
+  If LineNumber is NULL, then ASSERT().\r
+\r
+  @param  CodeType     The type of status code being converted.\r
+  @param  Value        The status code value being converted.\r
+  @param  Data         Pointer to status code data buffer. \r
+  @param  Filename     Pointer to the source file name that generated the ASSERT().\r
+  @param  Description  Pointer to the description of the ASSERT().\r
+  @param  LineNumber   Pointer to source line number that generated the ASSERT().\r
+\r
+  @retval  TRUE   The status code specified by CodeType, Value, and Data was \r
+                  converted ASSERT() arguments specified by Filename, Description, \r
+                  and LineNumber.\r
+  @retval  FALSE  The status code specified by CodeType, Value, and Data could \r
+                  not be converted to ASSERT() arguments.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ReportStatusCodeExtractAssertInfo (\r
+  IN EFI_STATUS_CODE_TYPE        CodeType,\r
+  IN EFI_STATUS_CODE_VALUE       Value,  \r
+  IN CONST EFI_STATUS_CODE_DATA  *Data, \r
+  OUT CHAR8                      **Filename,\r
+  OUT CHAR8                      **Description,\r
+  OUT UINT32                     *LineNumber\r
+  );\r
+\r
+\r
+/**\r
+  Extracts DEBUG() information from a status code structure.\r
+\r
+  Converts the status code specified by Data to the DEBUG() arguments specified \r
+  by ErrorLevel, Marker, and Format.  If type GUID in Data is \r
+  EFI_STATUS_CODE_DATA_TYPE_DEBUG_GUID, then extract ErrorLevel, Marker, and \r
+  Format from the optional data area of the status code buffer specified by Data.  \r
+  The optional data area of Data contains a 32-bit ErrorLevel followed by Marker \r
+  which is 12 UINTN parameters, followed by a Null-terminated ASCII string for \r
+  the Format.  If the DEBUG() information could be extracted from Data, then \r
+  return TRUE.  Otherwise, FALSE is returned.\r
+\r
+  If Data is NULL, then ASSERT().\r
+  If ErrorLevel is NULL, then ASSERT().\r
+  If Marker is NULL, then ASSERT().\r
+  If Format is NULL, then ASSERT().\r
+\r
+  @param  Data        Pointer to status code data buffer. \r
+  @param  ErrorLevel  Pointer to error level mask for a debug message.\r
+  @param  Marker      Pointer to the variable argument list associated with Format.\r
+  @param  Format      Pointer to a Null-terminated ASCII format string of a \r
+                      debug message.\r
+\r
+  @retval  TRUE   The status code specified by Data was converted DEBUG() arguments \r
+                  specified by ErrorLevel, Marker, and Format.\r
+  @retval  FALSE  The status code specified by Data could not be converted to \r
+                  DEBUG() arguments.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ReportStatusCodeExtractDebugInfo (\r
+  IN CONST EFI_STATUS_CODE_DATA  *Data, \r
+  OUT UINT32                     *ErrorLevel,\r
+  OUT VA_LIST                    *Marker,\r
+  OUT CHAR8                      **Format\r
+  );\r
+\r
+\r
+/**\r
+  Reports a status code.\r
+\r
+  Reports the status code specified by the parameters Type and Value.  Status \r
+  code also require an instance, caller ID, and extended data.  This function \r
+  passed in a zero instance, NULL extended data, and a caller ID of \r
+  gEfiCallerIdGuid, which is the GUID for the module.  \r
+  \r
+  ReportStatusCode()must actively prevent recusrsion.  If ReportStatusCode() \r
+  is called while processing another any other Report Status Code Library function,\r
+  then ReportStatusCode() must return immediately.\r
+\r
+  @param  Type   Status code type. \r
+  @param  Value  Status code value.\r
+\r
+  @retval  EFI_SUCCESS       The status code was reported.\r
+  @retval  EFI_DEVICE_ERROR  There status code could not be reported due to a \r
+                             device error.\r
+  @retval  EFI_UNSUPPORTED   Report status code is not supported\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportStatusCode (\r
+  IN EFI_STATUS_CODE_TYPE   Type,\r
+  IN EFI_STATUS_CODE_VALUE  Value\r
+  );\r
+\r
+\r
+/**\r
+  Reports a status code with a Device Path Protocol as the extended data.\r
+\r
+  Allocates and fills in the extended data section of a status code with the \r
+  Device Path Protocol specified by DevicePath.  This function is responsible \r
+  for allocating a buffer large enough for the standard header and the device \r
+  path.  The standard header is filled in with a GUID of \r
+  gEfiStatusCodeSpecificDataGuid.  The status code is reported with a zero \r
+  instance and a caller ID of gEfiCallerIdGuid.\r
+\r
+  ReportStatusCodeWithDevicePath()must actively prevent recursion.  If \r
+  ReportStatusCodeWithDevicePath() is called while processing another any other \r
+  Report Status Code Library function, then ReportStatusCodeWithDevicePath() \r
+  must return EFI_DEVICE_ERROR immediately.\r
+\r
+  If DevicePath is NULL, then ASSERT().\r
+\r
+  @param  Type        Status code type. \r
+  @param  Value       Status code value.\r
+  @param  DevicePath  Pointer to the Device Path Protocol to be reported.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported with the extended \r
+                                 data specified by DevicePath.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate the \r
+                                 extended data section.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportStatusCodeWithDevicePath (\r
+  IN EFI_STATUS_CODE_TYPE            Type,\r
+  IN EFI_STATUS_CODE_VALUE           Value,\r
+  IN CONST EFI_DEVICE_PATH_PROTOCOL  *DevicePath\r
+  );\r
+\r
+\r
+/**\r
+  Reports a status code with an extended data buffer.\r
+\r
+  Allocates and fills in the extended data section of a status code with the \r
+  extended data specified by ExtendedData and ExtendedDataSize.  ExtendedData \r
+  is assumed to be one of the data structures specified in Related Definitions.  \r
+  These data structure do not have the standard header, so this function is \r
+  responsible for allocating a buffer large enough for the standard header and \r
+  the extended data passed into this function.  The standard header is filled \r
+  in with a GUID of  gEfiStatusCodeSpecificDataGuid.  The status code is reported \r
+  with a zero instance and a caller ID of gEfiCallerIdGuid.\r
+\r
+  ReportStatusCodeWithExtendedData()must actively prevent recursion.  If \r
+  ReportStatusCodeWithExtendedData() is called while processing another any other \r
+  Report Status Code Library function, then ReportStatusCodeWithExtendedData() \r
+  must return EFI_DEVICE_ERROR immediately.\r
+\r
+  If ExtendedData is NULL, then ASSERT().\r
+  If ExtendedDataSize is 0, then ASSERT().\r
+\r
+  @param  Type              Status code type. \r
+  @param  Value             Status code value.\r
+  @param  ExtendedData      Pointer to the extended data buffer to be reported.\r
+  @param  ExtendedDataSize  The size, in bytes, of the extended data buffer to \r
+                            be reported.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported with the extended \r
+                                 data specified by ExtendedData and ExtendedDataSize.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate the \r
+                                 extended data section.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportStatusCodeWithExtendedData (\r
+  IN EFI_STATUS_CODE_TYPE   Type,\r
+  IN EFI_STATUS_CODE_VALUE  Value,\r
+  IN CONST VOID             *ExtendedData,\r
+  IN UINTN                  ExtendedDataSize\r
+  );\r
+\r
+\r
+/**\r
+  Reports a status code with full parameters.\r
+\r
+  The function reports a status code.  If ExtendedData is NULL and ExtendedDataSize \r
+  is 0, then an extended data buffer is not reported.  If ExtendedData is not \r
+  NULL and ExtendedDataSize is not 0, then an extended data buffer is allocated.  \r
+  ExtendedData is assumed not have the standard status code header, so this function \r
+  is responsible for allocating a buffer large enough for the standard header and \r
+  the extended data passed into this function.  The standard header is filled in \r
+  with a GUID specified by ExtendedDataGuid.  If ExtendedDataGuid is NULL, then a \r
+  GUID of gEfiStatusCodeSpecificDatauid is used.  The status code is reported with \r
+  an instance specified by Instance and a caller ID specified by CallerId.  If \r
+  CallerId is NULL, then a caller ID of gEfiCallerIdGuid is used.\r
+\r
+  ReportStatusCodeEx()must actively prevent recursion.  If ReportStatusCodeEx() \r
+  is called while processing another any other Report Status Code Library function, \r
+  then ReportStatusCodeEx() must return EFI_DEVICE_ERROR immediately.\r
+\r
+  If ExtendedData is NULL and ExtendedDataSize is not zero, then ASSERT().\r
+  If ExtendedData is not NULL and ExtendedDataSize is zero, then ASSERT().\r
+\r
+  @param  Type              Status code type. \r
+  @param  Value             Status code value.\r
+  @param  Instance          Status code instance number.\r
+  @param  CallerId          Pointer to a GUID that identifies the caller of this \r
+                            function.  If this parameter is NULL, then a caller \r
+                            ID of gEfiCallerIdGuid is used.\r
+  @param  ExtendedDataGuid  Pointer to the GUID for the extended data buffer.  \r
+                            If this parameter is NULL, then a the status code \r
+                            standard header is filled in with \r
+                            gEfiStatusCodeSpecificDataGuid.\r
+  @param  ExtendedData      Pointer to the extended data buffer.  This is an \r
+                            optional parameter that may be NULL.\r
+  @param  ExtendedDataSize  The size, in bytes, of the extended data buffer.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate \r
+                                 the extended data section if it was specified.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportStatusCodeEx (\r
+  IN EFI_STATUS_CODE_TYPE   Type,\r
+  IN EFI_STATUS_CODE_VALUE  Value,\r
+  IN UINT32                 Instance,\r
+  IN CONST EFI_GUID         *CallerId          OPTIONAL,\r
+  IN CONST EFI_GUID         *ExtendedDataGuid  OPTIONAL,\r
+  IN CONST VOID             *ExtendedData      OPTIONAL,\r
+  IN UINTN                  ExtendedDataSize\r
+  );\r
+\r
+\r
+/**\r
+  Returns TRUE if status codes of type EFI_PROGRESS_CODE are enabled\r
+\r
+  This function returns TRUE if the REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED \r
+  bit of PcdReportStatusCodeProperyMask is set.  Otherwise FALSE is returned.\r
+\r
+  @retval  TRUE   The REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is set.\r
+  @retval  FALSE  The REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is clear.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ReportProgressCodeEnabled (\r
+  VOID\r
+  );\r
+\r
+\r
+/**\r
+  Returns TRUE if status codes of type EFI_ERROR_CODE are enabled\r
+\r
+  This function returns TRUE if the REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED \r
+  bit of PcdReportStatusCodeProperyMask is set.  Otherwise FALSE is returned.\r
+\r
+  @retval  TRUE   The REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is set.\r
+  @retval  FALSE  The REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is clear.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ReportErrorCodeEnabled (\r
+  VOID\r
+  );\r
+\r
+\r
+/**\r
+  Returns TRUE if status codes of type EFI_DEBUG_CODE are enabled\r
+\r
+  This function returns TRUE if the REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED \r
+  bit of PcdReportStatusCodeProperyMask is set.  Otherwise FALSE is returned.\r
+\r
+  @retval  TRUE   The REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is set.\r
+  @retval  FALSE  The REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED bit of \r
+                  PcdReportStatusCodeProperyMask is clear.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ReportDebugCodeEnabled (\r
+  VOID\r
+  );\r
+\r
+\r
+/**\r
+  Reports a status code with minimal parameters if the status code type is enabled.\r
+\r
+  If the status code type specified by Type is enabled in \r
+  PcdReportStatusCodeProperyMask, then call ReportStatusCode() passing in Type \r
+  and Value.\r
+\r
+  @param  Type   Status code type. \r
+  @param  Value  Status code value.\r
+\r
+  @retval  EFI_SUCCESS       The status code was reported.\r
+  @retval  EFI_DEVICE_ERROR  There status code could not be reported due to a device error.\r
+  @retval  EFI_UNSUPPORTED   Report status code is not supported\r
+\r
+**/\r
+#define REPORT_STATUS_CODE(Type,Value)                                                          \\r
+  (ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ?  \\r
+  ReportStatusCode(Type,Value)                                                               :  \\r
+  (ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)       ?  \\r
+  ReportStatusCode(Type,Value)                                                               :  \\r
+  (ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)       ?  \\r
+  ReportStatusCode(Type,Value)                                                               :  \\r
+  EFI_UNSUPPORTED\r
+\r
+\r
+/**\r
+  Reports a status code with a Device Path Protocol as the extended data if the \r
+  status code type is enabled.\r
+\r
+  If the status code type specified by Type is enabled in \r
+  PcdReportStatusCodeProperyMask, then call ReportStatusCodeWithDevicePath() \r
+  passing in Type, Value, and DevicePath.\r
+\r
+  @param  Type        Status code type. \r
+  @param  Value       Status code value.\r
+  @param  DevicePath  Pointer to the Device Path Protocol to be reported.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported with the extended \r
+                                 data specified by DevicePath.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate the \r
+                                 extended data section.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+#define REPORT_STATUS_CODE_WITH_DEVICE_PATH(Type,Value,DevicePathParameter)                     \\r
+  (ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ?  \\r
+  ReportStatusCodeWithDevicePath(Type,Value,DevicePathParameter)                             :  \\r
+  (ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)       ?  \\r
+  ReportStatusCodeWithDevicePath(Type,Value,DevicePathParameter)                             :  \\r
+  (ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)       ?  \\r
+  ReportStatusCodeWithDevicePath(Type,Value,DevicePathParameter)                             :  \\r
+  EFI_UNSUPPORTED\r
+\r
+\r
+/**\r
+  Reports a status code with an extended data buffer if the status code type \r
+  is enabled.\r
+\r
+  If the status code type specified by Type is enabled in \r
+  PcdReportStatusCodeProperyMask, then call ReportStatusCodeWithExtendedData() \r
+  passing in Type, Value, ExtendedData, and ExtendedDataSize.\r
+\r
+  @param  Type              Status code type. \r
+  @param  Value             Status code value.\r
+  @param  ExtendedData      Pointer to the extended data buffer to be reported.\r
+  @param  ExtendedDataSize  The size, in bytes, of the extended data buffer to\r
+                            be reported.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported with the extended \r
+                                 data specified by ExtendedData and ExtendedDataSize.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate the \r
+                                 extended data section.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+#define REPORT_STATUS_CODE_WITH_EXTENDED_DATA(Type,Value,ExtendedData,ExtendedDataSize)         \\r
+  (ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) ?  \\r
+  ReportStatusCodeWithExtendedData(Type,Value,ExtendedData,ExtendedDataSize)                 :  \\r
+  (ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)       ?  \\r
+  ReportStatusCodeWithExtendedData(Type,Value,ExtendedData,ExtendedDataSize)                 :  \\r
+  (ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)       ?  \\r
+  ReportStatusCodeWithExtendedData(Type,Value,ExtendedData,ExtendedDataSize)                 :  \\r
+  EFI_UNSUPPORTED\r
+\r
+/**\r
+  Reports a status code specifying all parameters if the status code type is enabled.\r
+\r
+  If the status code type specified by Type is enabled in \r
+  PcdReportStatusCodeProperyMask, then call ReportStatusCodeEx() passing in Type, \r
+  Value, Instance, CallerId, ExtendedDataGuid, ExtendedData, and ExtendedDataSize.\r
+\r
+  @param  Type              Status code type. \r
+  @param  Value             Status code value.\r
+  @param  Instance          Status code instance number.\r
+  @param  CallerId          Pointer to a GUID that identifies the caller of this \r
+                            function.  If this parameter is NULL, then a caller \r
+                            ID of gEfiCallerIdGuid is used.\r
+  @param  ExtendedDataGuid  Pointer to the GUID for the extended data buffer.  \r
+                            If this parameter is NULL, then a the status code \r
+                            standard header is filled in with \r
+                            gEfiStatusCodeSpecificDataGuid.\r
+  @param  ExtendedData      Pointer to the extended data buffer.  This is an \r
+                            optional parameter that may be NULL.\r
+  @param  ExtendedDataSize  The size, in bytes, of the extended data buffer.\r
+\r
+  @retval  EFI_SUCCESS           The status code was reported.\r
+  @retval  EFI_OUT_OF_RESOURCES  There were not enough resources to allocate the \r
+                                 extended data section if it was specified.\r
+  @retval  EFI_UNSUPPORTED       Report status code is not supported\r
+\r
+**/\r
+#define REPORT_STATUS_CODE_EX(Type,Value,Instance,CallerId,ExtendedDataGuid,ExtendedData,ExtendedDataSize)  \\r
+  (ReportProgressCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE)             ?  \\r
+  ReportStatusCodeEx(Type,Value,Instance,CallerId,ExtendedDataGuid,ExtendedData,ExtendedDataSize)        :  \\r
+  (ReportErrorCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE)                   ?  \\r
+  ReportStatusCodeEx(Type,Value,Instance,CallerId,ExtendedDataGuid,ExtendedData,ExtendedDataSize)        :  \\r
+  (ReportDebugCodeEnabled() && ((Type) & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE)                   ?  \\r
+  ReportStatusCodeEx(Type,Value,Instance,CallerId,ExtendedDataGuid,ExtendedData,ExtendedDataSize)        :  \\r
+  EFI_UNSUPPORTED\r
+\r
+#endif\r