-/*++\r
+/** @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
+ 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
-Module Name:\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
- DxeStatusCode.h\r
-\r
-Abstract:\r
-\r
- Header file of EFI DXE/RT Status Code.\r
-\r
---*/\r
+**/\r
\r
#ifndef __DXE_STATUS_CODE_H__\r
#define __DXE_STATUS_CODE_H__\r
\r
-//\r
-// Include common header file for this module.\r
-//\r
-#include "CommonHeader.h"\r
+\r
+#include <FrameworkDxe.h>\r
+#include <FrameworkModuleDxe.h>\r
+#include <Guid/DataHubStatusCodeRecord.h>\r
+#include <Protocol/DataHub.h>\r
+#include <Protocol/SerialIo.h>\r
+#include <Guid/MemoryStatusCodeRecord.h>\r
+#include <Protocol/StatusCode.h>\r
+#include <Guid/StatusCodeDataTypeId.h>\r
+#include <Guid/EventGroup.h>\r
+\r
+#include <Library/BaseLib.h>\r
+#include <Library/SynchronizationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/ReportStatusCodeLib.h>\r
+#include <Library/PrintLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/HobLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/UefiRuntimeLib.h>\r
+#include <Library/SerialPortLib.h>\r
+#include <Library/OemHookStatusCodeLib.h>\r
\r
//\r
-// Data hub worker definition \r
+// Data hub worker definition\r
//\r
#define MAX_NUMBER_DATAHUB_RECORDS 1000\r
#define DATAHUB_BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE\r
#define EMPTY_RECORD_TAG 0xFF\r
-#define DATAHUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S')\r
+#define DATAHUB_STATUS_CODE_SIGNATURE SIGNATURE_32 ('B', 'D', 'H', 'S')\r
\r
//\r
// Address type of pointer.\r
// The point type always equal to PHYSICAL_MODE on IA32/X64/EBC architecture\r
-// Otherwise, VIRTUAL_MODE/PHYSICAL_MODE would be used on Ipf architecture, \r
-// \r
+// Otherwise, VIRTUAL_MODE/PHYSICAL_MODE would be used on Ipf architecture,\r
+//\r
typedef enum {\r
PHYSICAL_MODE,\r
VIRTUAL_MODE\r
} PROCESSOR_MODE;\r
\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Node;\r
- EFI_STATUS_CODE_TYPE CodeType;\r
- EFI_STATUS_CODE_VALUE Value;\r
- UINT32 Instance;\r
- EFI_GUID CallerId;\r
- EFI_STATUS_CODE_DATA Data;\r
- UINT8 ExtendData[EFI_STATUS_CODE_DATA_MAX_SIZE];\r
+ UINTN Signature;\r
+ LIST_ENTRY Node;\r
+\r
+ UINT8 Data[sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD) + EFI_STATUS_CODE_DATA_MAX_SIZE];\r
} DATAHUB_STATUSCODE_RECORD;\r
\r
\r
//\r
-// Runtime memory status code worker definition \r
-// \r
+// Runtime memory status code worker definition\r
+//\r
typedef struct {\r
UINT32 RecordIndex;\r
UINT32 NumberOfRecords;\r
\r
typedef struct {\r
//\r
- // Report operation nest status. \r
+ // Report operation nest status.\r
// If it is set, then the report operation has nested.\r
- // \r
+ //\r
UINT32 StatusCodeNestStatus;\r
//\r
// Runtime status code management header, the records buffer is following it.\r
- // \r
+ //\r
RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable[2];\r
} DXE_STATUS_CODE_CONTROLLER;\r
\r
\r
/**\r
- \r
- Dispatch initialization request to sub status code devices based on \r
+\r
+ Dispatch initialization request to sub status code devices based on\r
customized feature flags.\r
- \r
+\r
**/\r
VOID\r
InitializationDispatcherWorker (\r
\r
/**\r
Initialize serial status code worker.\r
- \r
+\r
@return The function always return EFI_SUCCESS\r
\r
**/\r
\r
/**\r
Convert status code value and extended data to readable ASCII string, send string to serial I/O device.\r
- \r
+\r
@param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.\r
- \r
- @param Value Describes the current status of a hardware or software entity. \r
- This included information about the class and subclass that is used to classify the entity \r
- as well as an operation. For progress codes, the operation is the current activity. \r
- For error codes, it is the exception. For debug codes, it is not defined at this time. \r
- Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below. \r
+\r
+ @param Value Describes the current status of a hardware or software entity.\r
+ This included information about the class and subclass that is used to classify the entity\r
+ as well as an operation. For progress codes, the operation is the current activity.\r
+ For error codes, it is the exception. For debug codes, it is not defined at this time.\r
+ Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.\r
Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.\r
- \r
- @param Instance The enumeration of a hardware or software entity within the system. \r
- A system may contain multiple entities that match a class/subclass pairing. \r
- The instance differentiates between them. An instance of 0 indicates that instance information is unavailable, \r
+\r
+ @param Instance The enumeration of a hardware or software entity within the system.\r
+ A system may contain multiple entities that match a class/subclass pairing.\r
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,\r
not meaningful, or not relevant. Valid instance numbers start with 1.\r
\r
\r
- @param CallerId This optional parameter may be used to identify the caller. \r
- This parameter allows the status code driver to apply different rules to different callers. \r
- Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.\r
+ @param CallerId This optional parameter may be used to identify the caller.\r
+ This parameter allows the status code driver to apply different rules to different callers.\r
+ Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0 Specification.\r
\r
\r
@param Data This optional parameter may be used to pass additional data\r
- \r
+\r
@retval EFI_SUCCESS Success to report status code to serial I/O.\r
@retval EFI_DEVICE_ERROR EFI serial device can not work after ExitBootService() is called .\r
\r
\r
/**\r
Initialize runtime memory status code.\r
- \r
+\r
@return The function always return EFI_SUCCESS\r
\r
**/\r
);\r
\r
/**\r
- Report status code into runtime memory. If the runtime pool is full, roll back to the \r
+ Report status code into runtime memory. If the runtime pool is full, roll back to the\r
first record and overwrite it.\r
- \r
- @param RtMemoryStatusCodeTable \r
+\r
+ @param RtMemoryStatusCodeTable\r
Point to Runtime memory table header.\r
\r
@param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.\r
- \r
- @param Value Describes the current status of a hardware or software entity. \r
- This included information about the class and subclass that is used to classify the entity \r
- as well as an operation. For progress codes, the operation is the current activity. \r
- For error codes, it is the exception. For debug codes, it is not defined at this time. \r
- Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below. \r
+\r
+ @param Value Describes the current status of a hardware or software entity.\r
+ This included information about the class and subclass that is used to classify the entity\r
+ as well as an operation. For progress codes, the operation is the current activity.\r
+ For error codes, it is the exception. For debug codes, it is not defined at this time.\r
+ Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.\r
Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.\r
- \r
- @param Instance The enumeration of a hardware or software entity within the system. \r
- A system may contain multiple entities that match a class/subclass pairing. \r
- The instance differentiates between them. An instance of 0 indicates that instance information is unavailable, \r
+\r
+ @param Instance The enumeration of a hardware or software entity within the system.\r
+ A system may contain multiple entities that match a class/subclass pairing.\r
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,\r
not meaningful, or not relevant. Valid instance numbers start with 1.\r
- \r
+\r
@return The function always return EFI_SUCCESS.\r
\r
**/\r
/**\r
Initialize data hubstatus code.\r
Create a data hub listener.\r
- \r
+\r
@return The function always return EFI_SUCCESS\r
\r
**/\r
\r
/**\r
Report status code into DataHub.\r
- \r
+\r
@param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.\r
- \r
- @param Value Describes the current status of a hardware or software entity. \r
- This included information about the class and subclass that is used to classify the entity \r
- as well as an operation. For progress codes, the operation is the current activity. \r
- For error codes, it is the exception. For debug codes, it is not defined at this time. \r
- Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below. \r
+\r
+ @param Value Describes the current status of a hardware or software entity.\r
+ This included information about the class and subclass that is used to classify the entity\r
+ as well as an operation. For progress codes, the operation is the current activity.\r
+ For error codes, it is the exception. For debug codes, it is not defined at this time.\r
+ Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.\r
Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.\r
- \r
- @param Instance The enumeration of a hardware or software entity within the system. \r
- A system may contain multiple entities that match a class/subclass pairing. \r
- The instance differentiates between them. An instance of 0 indicates that instance information is unavailable, \r
+\r
+ @param Instance The enumeration of a hardware or software entity within the system.\r
+ A system may contain multiple entities that match a class/subclass pairing.\r
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,\r
not meaningful, or not relevant. Valid instance numbers start with 1.\r
\r
\r
- @param CallerId This optional parameter may be used to identify the caller. \r
- This parameter allows the status code driver to apply different rules to different callers. \r
- Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.\r
+ @param CallerId This optional parameter may be used to identify the caller.\r
+ This parameter allows the status code driver to apply different rules to different callers.\r
+ Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0 Specification.\r
\r
\r
@param Data This optional parameter may be used to pass additional data\r
- \r
+\r
@retval EFI_OUT_OF_RESOURCES Can not acquire record buffer.\r
@retval EFI_DEVICE_ERROR EFI serial device can not work after ExitBootService() is called .\r
@retval EFI_SUCCESS Success to cache status code and signal log data event.\r
IN EFI_STATUS_CODE_DATA *Data OPTIONAL\r
);\r
\r
+\r
+//\r
+// Declaration for callback Event.\r
+//\r
+VOID\r
+EFIAPI\r
+VirtualAddressChangeCallBack (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+//\r
+// Declaration for original Entry Point.\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+DxeStatusCodeDriverEntry (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ );\r
+\r
//\r
// declaration of DXE status code controller.\r
-// \r
+//\r
extern DXE_STATUS_CODE_CONTROLLER gDxeStatusCode;\r
\r
#endif\r