\r
Initialize OEM status code device .\r
\r
+\r
+ @return Status of initialization of OEM status code device.\r
+ \r
**/\r
-VOID\r
+EFI_STATUS\r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
\r
Programmed hardware of Serial port.\r
\r
+ @return Status of Serial Port Device initialization.\r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
\r
Initialize OEM status code device .\r
\r
+ @return Always return EFI_SUCCESS.\r
+\r
**/\r
-VOID\r
+EFI_STATUS\r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
)\r
{\r
- return;\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
\r
@param Data This optional parameter may be used to pass additional data\r
\r
- @return The function always return EFI_SUCCESS.\r
+ @return The function always return EFI_UNSUPPORTED.\r
\r
**/\r
EFI_STATUS\r
\r
//\r
// Declaration of status code protocol.\r
-// \r
+//\r
+STATIC\r
EFI_STATUS_CODE_PROTOCOL mEfiStatusCodeProtocol = {\r
ReportDispatcher\r
};\r
//\r
// Initialize FIFO to cache records.\r
//\r
+STATIC \r
EFI_LOCK mFifoLock = EFI_INITIALIZE_LOCK_VARIABLE (EFI_TPL_HIGH_LEVEL);\r
+STATIC\r
LIST_ENTRY mRecordsFifo = INITIALIZE_LIST_HEAD_VARIABLE (mRecordsFifo);\r
+STATIC\r
UINTN mNumberOfRecords = 0;\r
-\r
+STATIC\r
EFI_EVENT mLogDataHubEvent;\r
//\r
// Cache data hub protocol.\r
//\r
+STATIC\r
EFI_DATA_HUB_PROTOCOL *mDataHubProtocol;\r
\r
\r
)\r
{\r
EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_STATUS Status;\r
MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;\r
MEMORY_STATUSCODE_RECORD *Record;\r
UINTN ExpectedPacketIndex = 0;\r
// if enable UseDataHub, then initialize data hub status code worker.\r
//\r
if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {\r
- EfiSerialStatusCodeInitializeWorker ();\r
+ Status = EfiSerialStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) {\r
- SerialPortInitialize ();\r
+ Status = SerialPortInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {\r
- RtMemoryStatusCodeInitializeWorker ();\r
+ Status = RtMemoryStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {\r
- DataHubStatusCodeInitializeWorker ();\r
+ Status = DataHubStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
- OemHookStatusCodeInitialize ();\r
+ Status = OemHookStatusCodeInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
//\r
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gEfiStatusCodeDataTypeStringGuid</GuidCName>\r
</GuidCNames>\r
+ <GuidCNames Usage="SOMETIMES_CONSUMED">\r
+ <GuidCName>gEfiStatusCodeSpecificDataGuid</GuidCName>\r
+ </GuidCNames>\r
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gEfiStatusCodeGuid</GuidCName>\r
</GuidCNames>\r
//\r
RtMemoryStatusCodeTable = \r
(RUNTIME_MEMORY_STATUSCODE_HEADER *) AllocatePool (\r
- sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024\r
+ sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) +\r
+ PcdGet16 (PcdStatusCodeRuntimeMemorySize) *\r
+ 1024\r
);\r
\r
ASSERT (NULL != RtMemoryStatusCodeTable);\r
RtMemoryStatusCodeTable->RecordIndex = 0;\r
}\r
\r
-\r
return EFI_SUCCESS;\r
}\r
\r
\r
**/\r
\r
-EFI_SERIAL_IO_PROTOCOL *SerialIoProtocol;\r
+STATIC\r
+EFI_SERIAL_IO_PROTOCOL *mSerialIoProtocol;\r
\r
/**\r
Initialize serial status code worker.\r
Status = gBS->LocateProtocol (\r
&gEfiSerialIoProtocolGuid,\r
NULL,\r
- (VOID **) &SerialIoProtocol\r
+ (VOID **) &mSerialIoProtocol\r
);\r
\r
ASSERT_EFI_ERROR (Status);\r
\r
@param Data This optional parameter may be used to pass additional data\r
\r
- @return The function always return EFI_SUCCESS.\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
EFI_STATUS\r
VA_LIST Marker;\r
EFI_DEBUG_INFO *DebugInfo;\r
\r
+\r
+ if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) && EfiAtRuntime ()) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+\r
Buffer[0] = '\0';\r
\r
if (Data != NULL &&\r
//\r
// Print ERROR information into output buffer.\r
//\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "ERROR: C%x:V%x I%x", \r
+ CodeType, \r
+ Value, \r
+ Instance\r
+ );\r
\r
//\r
- // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers.\r
+ // Make sure we don't try to print values that weren't \r
+ // intended to be printed, especially NULL GUID pointers.\r
//\r
\r
if (CallerId != NULL) {\r
);\r
}\r
\r
- if (Data) {\r
+ if (Data != NULL) {\r
CharCount += AsciiSPrint (\r
&Buffer[CharCount - 1],\r
(EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),\r
"\n\r"\r
);\r
} else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "PROGRESS CODE: V%x I%x\n\r", \r
+ Value, \r
+ Instance\r
+ );\r
} else {\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "Undefined: C%x:V%x I%x\n\r", \r
+ CodeType, \r
+ Value, \r
+ Instance\r
+ );\r
}\r
\r
\r
SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {\r
- SerialIoProtocol->Write (\r
- SerialIoProtocol,\r
+ mSerialIoProtocol->Write (\r
+ mSerialIoProtocol,\r
&CharCount,\r
Buffer\r
);\r
\r
@param PacketIndex Index of records packet. \r
\r
- @return The function always return EFI_SUCCESS\r
+ @return Always return pointer of memory status code packet.\r
\r
**/\r
MEMORY_STATUSCODE_PACKET_HEADER *\r
PacketHeader =\r
(MEMORY_STATUSCODE_PACKET_HEADER *) BuildGuidHob (\r
&gMemoryStatusCodeRecordGuid, \r
- (PcdGet16 (PcdStatusCodeMemorySize) * 1024) + sizeof (MEMORY_STATUSCODE_PACKET_HEADER));\r
+ PcdGet16 (PcdStatusCodeMemorySize) * \r
+ 1024 +\r
+ sizeof (MEMORY_STATUSCODE_PACKET_HEADER)\r
+ );\r
ASSERT (PacketHeader != NULL);\r
\r
PacketHeader->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024)/ sizeof (MEMORY_STATUSCODE_RECORD);\r
\r
/**\r
Report status code to all supported device.\r
- * \r
- * \r
+ \r
+ \r
@param PeiServices\r
\r
@param Type Indicates the type of status code being reported. \r
IN EFI_STATUS_CODE_DATA *Data OPTIONAL\r
);\r
\r
-\r
+STATIC\r
EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { \r
ReportDispatcher\r
};\r
\r
+STATIC\r
EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiDescriptor = {\r
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,\r
&gEfiPeiStatusCodePpiGuid,\r
\r
/**\r
Report status code to all supported device.\r
- * \r
- * \r
+ \r
+ \r
@param PeiServices\r
\r
@param CodeType Indicates the type of status code being reported. \r
// if enable UseOEM, then initialize Oem status code.\r
//\r
if (FeaturePcdGet (PcdStatusCodeUseSerial)) {\r
- SerialPortInitialize();\r
+ Status = SerialPortInitialize();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseMemory)) {\r
- MemoryStatusCodeInitializeWorker ();\r
+ Status = MemoryStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
- OemHookStatusCodeInitialize ();\r
+ Status = OemHookStatusCodeInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
//\r
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gMemoryStatusCodeRecordGuid</GuidCName>\r
</GuidCNames>\r
+ <GuidCNames Usage="SOMETIMES_CONSUMED">\r
+ <GuidCName>gEfiStatusCodeSpecificDataGuid</GuidCName>\r
+ </GuidCNames>\r
</Guids>\r
<Externs>\r
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
//\r
// Print ERROR information into output buffer.\r
//\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "ERROR: C%x:V%x I%x", \r
+ CodeType, \r
+ Value, \r
+ Instance\r
+ );\r
\r
//\r
// Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers.\r
"\n\r"\r
);\r
} else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "PROGRESS CODE: V%x I%x\n\r", \r
+ Value, \r
+ Instance\r
+ );\r
} else {\r
- CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance);\r
+ CharCount = AsciiSPrint (\r
+ Buffer, \r
+ EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+ "Undefined: C%x:V%x I%x\n\r", \r
+ CodeType, \r
+ Value, \r
+ Instance\r
+ );\r
}\r
\r
//\r