24EFI_EVENT mOnStatusCodeProtocolInstallEvent;
39 if (mReportStatusCodeLibStatusCodeProtocol !=
NULL) {
47 Status =
gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid,
NULL, (
VOID **)&mReportStatusCodeLibStatusCodeProtocol);
48 if (EFI_ERROR (Status)) {
49 mReportStatusCodeLibStatusCodeProtocol =
NULL;
93 if (mReportStatusCodeLibStatusCodeProtocol ==
NULL) {
94 return EFI_UNSUPPORTED;
100 return mReportStatusCodeLibStatusCodeProtocol->ReportStatusCode (Type, Value, Instance, (
EFI_GUID *)CallerId, Data);
103 return EFI_UNSUPPORTED;
147 (((Value & EFI_STATUS_CODE_SUBCLASS_MASK) >> 16) & 0x1f));
193 OUT CHAR8 **Filename,
194 OUT CHAR8 **Description,
195 OUT UINT32 *LineNumber
200 ASSERT (Data !=
NULL);
201 ASSERT (Filename !=
NULL);
202 ASSERT (Description !=
NULL);
203 ASSERT (LineNumber !=
NULL);
206 ((CodeType & EFI_STATUS_CODE_SEVERITY_MASK) == EFI_ERROR_UNRECOVERED) &&
207 ((Value & EFI_STATUS_CODE_OPERATION_MASK) == EFI_SW_EC_ILLEGAL_SOFTWARE_STATE))
210 *Filename = (CHAR8 *)(AssertData + 1);
211 *Description = *Filename +
AsciiStrLen (*Filename) + 1;
252 OUT UINT32 *ErrorLevel,
259 ASSERT (Data !=
NULL);
260 ASSERT (ErrorLevel !=
NULL);
261 ASSERT (Marker !=
NULL);
262 ASSERT (Format !=
NULL);
267 if (!
CompareGuid (&Data->Type, &gEfiStatusCodeDataTypeDebugGuid)) {
288 *Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);
360 ASSERT (DevicePath !=
NULL);
411 ASSERT (ExtendedData !=
NULL);
412 ASSERT (ExtendedDataSize != 0);
483 ASSERT (!((ExtendedData ==
NULL) && (ExtendedDataSize != 0)));
484 ASSERT (!((ExtendedData !=
NULL) && (ExtendedDataSize == 0)));
493 return EFI_UNSUPPORTED;
499 Tpl =
gBS->RaiseTPL (TPL_HIGH_LEVEL);
500 gBS->RestoreTPL (Tpl);
502 if (Tpl > TPL_NOTIFY) {
503 return EFI_OUT_OF_RESOURCES;
509 StatusCodeData =
NULL;
511 if (StatusCodeData ==
NULL) {
512 return EFI_OUT_OF_RESOURCES;
520 StatusCodeData->
Size = (UINT16)ExtendedDataSize;
521 if (ExtendedDataGuid ==
NULL) {
522 ExtendedDataGuid = &gEfiStatusCodeSpecificDataGuid;
530 if (ExtendedData !=
NULL) {
531 CopyMem (StatusCodeData + 1, ExtendedData, ExtendedDataSize);
537 if (CallerId ==
NULL) {
538 CallerId = &gEfiCallerIdGuid;
547 gBS->FreePool (StatusCodeData);
571 return (BOOLEAN)((
PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_PROGRESS_CODE_ENABLED) != 0);
592 return (BOOLEAN)((
PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_ERROR_CODE_ENABLED) != 0);
613 return (BOOLEAN)((
PcdGet8 (PcdReportStatusCodePropertyMask) & REPORT_STATUS_CODE_PROPERTY_DEBUG_CODE_ENABLED) != 0);
633 if (mReportStatusCodeLibStatusCodeProtocol !=
NULL) {
634 gBS->CloseEvent (mOnStatusCodeProtocolInstallEvent);
663 if ((mReportStatusCodeLibStatusCodeProtocol ==
NULL) && (
gBS !=
NULL)) {
667 Status =
gBS->CreateEvent (
672 &mOnStatusCodeProtocolInstallEvent
679 Status =
gBS->RegisterProtocolNotify (
680 &gEfiStatusCodeRuntimeProtocolGuid,
681 mOnStatusCodeProtocolInstallEvent,
708 if (mReportStatusCodeLibStatusCodeProtocol ==
NULL) {
709 Status =
gBS->CloseEvent (mOnStatusCodeProtocolInstallEvent);
UINTN EFIAPI AsciiStrLen(IN CONST CHAR8 *String)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
UINTN EFIAPI GetDevicePathSize(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_STATUS EFIAPI ReportStatusCodeLibConstructor(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
VOID InternalGetReportStatusCode(VOID)
BOOLEAN EFIAPI ReportErrorCodeEnabled(VOID)
VOID EFIAPI OnStatusCodeRuntimeProtocolInstalledNotification(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI ReportStatusCodeWithExtendedData(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value, IN CONST VOID *ExtendedData, IN UINTN ExtendedDataSize)
BOOLEAN EFIAPI ReportProgressCodeEnabled(VOID)
BOOLEAN EFIAPI CodeTypeToPostCode(IN EFI_STATUS_CODE_TYPE CodeType, IN EFI_STATUS_CODE_VALUE Value, OUT UINT8 *PostCode)
EFI_STATUS EFIAPI ReportStatusCodeWithDevicePath(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value, IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_STATUS EFIAPI ReportStatusCode(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value)
EFI_STATUS EFIAPI ReportStatusCodeEx(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value, IN UINT32 Instance, IN CONST EFI_GUID *CallerId OPTIONAL, IN CONST EFI_GUID *ExtendedDataGuid OPTIONAL, IN CONST VOID *ExtendedData OPTIONAL, IN UINTN ExtendedDataSize)
EFI_STATUS InternalReportStatusCode(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value, IN UINT32 Instance, IN CONST EFI_GUID *CallerId OPTIONAL, IN EFI_STATUS_CODE_DATA *Data OPTIONAL)
BOOLEAN EFIAPI ReportDebugCodeEnabled(VOID)
BOOLEAN EFIAPI ReportStatusCodeExtractDebugInfo(IN CONST EFI_STATUS_CODE_DATA *Data, OUT UINT32 *ErrorLevel, OUT BASE_LIST *Marker, OUT CHAR8 **Format)
EFI_STATUS EFIAPI ReportStatusCodeLibDestructor(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
BOOLEAN EFIAPI ReportStatusCodeExtractAssertInfo(IN EFI_STATUS_CODE_TYPE CodeType, IN EFI_STATUS_CODE_VALUE Value, IN CONST EFI_STATUS_CODE_DATA *Data, OUT CHAR8 **Filename, OUT CHAR8 **Description, OUT UINT32 *LineNumber)
#define ASSERT_EFI_ERROR(StatusParameter)
#define PcdGet8(TokenName)
UINT32 EFI_STATUS_CODE_VALUE
#define EFI_PROGRESS_CODE
UINT32 EFI_STATUS_CODE_TYPE
#define EFI_STATUS_CODE_CLASS_MASK
#define EFI_STATUS_CODE_TYPE_MASK
UINT32 EFIAPI PostCode(IN UINT32 Value)
#define MAX_EXTENDED_DATA_SIZE