EDKT236, EDKT237, EDKT232, EDKT229 , EDKT233
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1418
6f19259b-4bc3-4df7-8a09-
765794883524
13 files changed:
\r
Initialize OEM status code device .\r
\r
\r
Initialize OEM status code device .\r
\r
+\r
+ @return Status of initialization of OEM status code device.\r
+ \r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
\r
Programmed hardware of Serial port.\r
\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
EFI_STATUS\r
EFIAPI\r
\r
Initialize OEM status code device .\r
\r
\r
Initialize OEM status code device .\r
\r
+ @return Always return EFI_SUCCESS.\r
+\r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
)\r
{\r
EFIAPI\r
OemHookStatusCodeInitialize (\r
VOID\r
)\r
{\r
\r
@param Data This optional parameter may be used to pass additional data\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
// Declaration of status code protocol.\r
\r
//\r
// Declaration of status code protocol.\r
EFI_STATUS_CODE_PROTOCOL mEfiStatusCodeProtocol = {\r
ReportDispatcher\r
};\r
EFI_STATUS_CODE_PROTOCOL mEfiStatusCodeProtocol = {\r
ReportDispatcher\r
};\r
//\r
// Initialize FIFO to cache records.\r
//\r
//\r
// Initialize FIFO to cache records.\r
//\r
EFI_LOCK mFifoLock = EFI_INITIALIZE_LOCK_VARIABLE (EFI_TPL_HIGH_LEVEL);\r
EFI_LOCK mFifoLock = EFI_INITIALIZE_LOCK_VARIABLE (EFI_TPL_HIGH_LEVEL);\r
LIST_ENTRY mRecordsFifo = INITIALIZE_LIST_HEAD_VARIABLE (mRecordsFifo);\r
LIST_ENTRY mRecordsFifo = INITIALIZE_LIST_HEAD_VARIABLE (mRecordsFifo);\r
UINTN mNumberOfRecords = 0;\r
UINTN mNumberOfRecords = 0;\r
EFI_EVENT mLogDataHubEvent;\r
//\r
// Cache data hub protocol.\r
//\r
EFI_EVENT mLogDataHubEvent;\r
//\r
// Cache data hub protocol.\r
//\r
EFI_DATA_HUB_PROTOCOL *mDataHubProtocol;\r
\r
\r
EFI_DATA_HUB_PROTOCOL *mDataHubProtocol;\r
\r
\r
)\r
{\r
EFI_PEI_HOB_POINTERS Hob;\r
)\r
{\r
EFI_PEI_HOB_POINTERS Hob;\r
MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;\r
MEMORY_STATUSCODE_RECORD *Record;\r
UINTN ExpectedPacketIndex = 0;\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
// 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
}\r
if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) {\r
- SerialPortInitialize ();\r
+ Status = SerialPortInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {\r
- RtMemoryStatusCodeInitializeWorker ();\r
+ Status = RtMemoryStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {\r
- DataHubStatusCodeInitializeWorker ();\r
+ Status = DataHubStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
- OemHookStatusCodeInitialize ();\r
+ Status = OemHookStatusCodeInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gEfiStatusCodeDataTypeStringGuid</GuidCName>\r
</GuidCNames>\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
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gEfiStatusCodeGuid</GuidCName>\r
</GuidCNames>\r
//\r
RtMemoryStatusCodeTable = \r
(RUNTIME_MEMORY_STATUSCODE_HEADER *) AllocatePool (\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
);\r
\r
ASSERT (NULL != RtMemoryStatusCodeTable);\r
RtMemoryStatusCodeTable->RecordIndex = 0;\r
}\r
\r
RtMemoryStatusCodeTable->RecordIndex = 0;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
return EFI_SUCCESS;\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
\r
/**\r
Initialize serial status code worker.\r
Status = gBS->LocateProtocol (\r
&gEfiSerialIoProtocolGuid,\r
NULL,\r
Status = gBS->LocateProtocol (\r
&gEfiSerialIoProtocolGuid,\r
NULL,\r
- (VOID **) &SerialIoProtocol\r
+ (VOID **) &mSerialIoProtocol\r
);\r
\r
ASSERT_EFI_ERROR (Status);\r
);\r
\r
ASSERT_EFI_ERROR (Status);\r
\r
@param Data This optional parameter may be used to pass additional data\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
+ @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
VA_LIST Marker;\r
EFI_DEBUG_INFO *DebugInfo;\r
\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
Buffer[0] = '\0';\r
\r
if (Data != NULL &&\r
//\r
// Print ERROR information into output buffer.\r
//\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
- // 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
if (CallerId != NULL) {\r
CharCount += AsciiSPrint (\r
&Buffer[CharCount - 1],\r
(EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),\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
"\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
- 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
SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {\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
&CharCount,\r
Buffer\r
);\r
\r
@param PacketIndex Index of records packet. \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
\r
**/\r
MEMORY_STATUSCODE_PACKET_HEADER *\r
PacketHeader =\r
(MEMORY_STATUSCODE_PACKET_HEADER *) BuildGuidHob (\r
&gMemoryStatusCodeRecordGuid, \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
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
Report status code to all supported device.\r
@param PeiServices\r
\r
@param Type Indicates the type of status code being reported. \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
IN EFI_STATUS_CODE_DATA *Data OPTIONAL\r
);\r
\r
EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { \r
ReportDispatcher\r
};\r
\r
EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { \r
ReportDispatcher\r
};\r
\r
EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiDescriptor = {\r
EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,\r
&gEfiPeiStatusCodePpiGuid,\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
Report status code to all supported device.\r
@param PeiServices\r
\r
@param CodeType Indicates the type of status code being reported. \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
// 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
}\r
if (FeaturePcdGet (PcdStatusCodeUseMemory)) {\r
- MemoryStatusCodeInitializeWorker ();\r
+ Status = MemoryStatusCodeInitializeWorker ();\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
}\r
if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
- OemHookStatusCodeInitialize ();\r
+ Status = OemHookStatusCodeInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
<GuidCNames Usage="SOMETIMES_CONSUMED">\r
<GuidCName>gMemoryStatusCodeRecordGuid</GuidCName>\r
</GuidCNames>\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
</Guids>\r
<Externs>\r
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
//\r
// Print ERROR information into output buffer.\r
//\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
\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
"\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
- 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