diff options
Diffstat (limited to 'MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c')
-rw-r--r-- | MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c | 146 |
1 files changed, 77 insertions, 69 deletions
diff --git a/MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c b/MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c index 24bfb4f37e..cd7e2abbd3 100644 --- a/MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c +++ b/MdePkg/Library/UefiDebugLibDebugPortProtocol/DebugLib.c @@ -9,7 +9,6 @@ #include <Uefi.h>
#include <Library/DebugLib.h>
-#include <Library/UefiBootServicesTableLib.h>
#include <Library/PrintLib.h>
#include <Library/PcdLib.h>
#include <Library/BaseLib.h>
@@ -37,6 +36,9 @@ EFI_DEBUGPORT_PROTOCOL *mDebugPort = NULL; //
VA_LIST mVaListNull;
+extern BOOLEAN mPostEBS;
+extern EFI_BOOT_SERVICES *mDebugBS;
+
/**
Send message to DebugPort Protocol.
@@ -56,31 +58,33 @@ UefiDebugLibDebugPortProtocolWrite ( UINTN Length;
EFI_STATUS Status;
- //
- // If mDebugPort is NULL, initialize first.
- //
- if (mDebugPort == NULL) {
- Status = gBS->LocateProtocol (&gEfiDebugPortProtocolGuid, NULL, (VOID **)&mDebugPort);
- if (EFI_ERROR (Status)) {
- return;
- }
+ if (!mPostEBS) {
+ //
+ // If mDebugPort is NULL, initialize first.
+ //
+ if (mDebugPort == NULL) {
+ Status = mDebugBS->LocateProtocol (&gEfiDebugPortProtocolGuid, NULL, (VOID **)&mDebugPort);
+ if (EFI_ERROR (Status)) {
+ return;
+ }
+
+ mDebugPort->Reset (mDebugPort);
+ }
- mDebugPort->Reset (mDebugPort);
- }
+ //
+ // EFI_DEBUGPORT_PROTOCOL.Write is called until all message is sent.
+ //
+ while (BufferLength > 0) {
+ Length = BufferLength;
- //
- // EFI_DEBUGPORT_PROTOCOL.Write is called until all message is sent.
- //
- while (BufferLength > 0) {
- Length = BufferLength;
+ Status = mDebugPort->Write (mDebugPort, WRITE_TIMEOUT, &Length, (VOID *) Buffer);
+ if (EFI_ERROR (Status) || BufferLength < Length) {
+ break;
+ }
- Status = mDebugPort->Write (mDebugPort, WRITE_TIMEOUT, &Length, (VOID *) Buffer);
- if (EFI_ERROR (Status) || BufferLength < Length) {
- break;
+ Buffer += Length;
+ BufferLength -= Length;
}
-
- Buffer += Length;
- BufferLength -= Length;
}
}
@@ -142,31 +146,33 @@ DebugPrintMarker ( {
CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
- //
- // If Format is NULL, then ASSERT().
- //
- ASSERT (Format != NULL);
+ if (!mPostEBS) {
+ //
+ // If Format is NULL, then ASSERT().
+ //
+ ASSERT (Format != NULL);
+
+ //
+ // Check driver debug mask value and global mask
+ //
+ if ((ErrorLevel & GetDebugPrintErrorLevel ()) == 0) {
+ return;
+ }
- //
- // Check driver debug mask value and global mask
- //
- if ((ErrorLevel & GetDebugPrintErrorLevel ()) == 0) {
- return;
- }
+ //
+ // Convert the DEBUG() message to an ASCII String
+ //
+ if (BaseListMarker == NULL) {
+ AsciiVSPrint (Buffer, sizeof (Buffer), Format, VaListMarker);
+ } else {
+ AsciiBSPrint (Buffer, sizeof (Buffer), Format, BaseListMarker);
+ }
- //
- // Convert the DEBUG() message to an ASCII String
- //
- if (BaseListMarker == NULL) {
- AsciiVSPrint (Buffer, sizeof (Buffer), Format, VaListMarker);
- } else {
- AsciiBSPrint (Buffer, sizeof (Buffer), Format, BaseListMarker);
+ //
+ // Send the print string to EFI_DEBUGPORT_PROTOCOL.Write.
+ //
+ UefiDebugLibDebugPortProtocolWrite (Buffer, AsciiStrLen (Buffer));
}
-
- //
- // Send the print string to EFI_DEBUGPORT_PROTOCOL.Write.
- //
- UefiDebugLibDebugPortProtocolWrite (Buffer, AsciiStrLen (Buffer));
}
@@ -259,31 +265,33 @@ DebugAssert ( {
CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
- //
- // Generate the ASSERT() message in ASCII format
- //
- AsciiSPrint (
- Buffer,
- sizeof (Buffer),
- "ASSERT [%a] %a(%d): %a\n",
- gEfiCallerBaseName,
- FileName,
- LineNumber,
- Description
- );
-
- //
- // Send the print string to EFI_DEBUGPORT_PROTOCOL.Write.
- //
- UefiDebugLibDebugPortProtocolWrite (Buffer, AsciiStrLen (Buffer));
-
- //
- // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
- //
- if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
- CpuBreakpoint ();
- } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
- CpuDeadLoop ();
+ if (!mPostEBS) {
+ //
+ // Generate the ASSERT() message in ASCII format
+ //
+ AsciiSPrint (
+ Buffer,
+ sizeof (Buffer),
+ "ASSERT [%a] %a(%d): %a\n",
+ gEfiCallerBaseName,
+ FileName,
+ LineNumber,
+ Description
+ );
+
+ //
+ // Send the print string to EFI_DEBUGPORT_PROTOCOL.Write.
+ //
+ UefiDebugLibDebugPortProtocolWrite (Buffer, AsciiStrLen (Buffer));
+
+ //
+ // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
+ //
+ if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
+ CpuBreakpoint ();
+ } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
+ CpuDeadLoop ();
+ }
}
}
|